export type ClientOptions = { baseUrl: 'https://roxyapi.com/api/v2' | (string & {}); }; export type NatalChartResponse = { /** * Birth details echoed back from the request. Confirms the input used for this chart calculation. */ birthDetails: { /** * Birth date used for this chart (YYYY-MM-DD). */ date: string; /** * Birth time used for this chart (HH:MM:SS, 24-hour). */ time: string; /** * Birth latitude in decimal degrees. */ latitude: number; /** * Birth longitude in decimal degrees. */ longitude: number; /** * Timezone offset from UTC in decimal hours. */ timezone: number; }; /** * All 14 celestial bodies (10 classical planets, lunar nodes, Chiron, Black Moon Lilith) with zodiac signs, house placements, and interpretations. */ planets: Array<{ /** * Planet or point name (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, North Node, South Node, Chiron, Black Moon Lilith). Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use nameLocalized for anything a reader sees. The lunar nodes are the mean node; software using the true node may show node positions up to 1.75 degrees different. */ name: string; /** * Planet or point name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Tropical ecliptic longitude in degrees (0-360). */ longitude: number; /** * Ecliptic latitude in degrees. */ latitude: number; /** * Tropical zodiac sign this planet occupies. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; /** * House placement (1-12) based on the selected house system. */ house: number; /** * Daily motion in degrees per day. Negative values indicate retrograde. */ speed: number; /** * Whether the planet is in retrograde motion. */ isRetrograde: boolean; /** * Essential dignity of this body in the sign it occupies: domicile (the sign it rules, its strongest placement), exaltation (honoured and amplified), detriment (opposite its rulership, where it struggles), fall (opposite its exaltation, where it is weakened), or peregrine (in none of its own dignity signs). Absent for the lunar nodes, Chiron and Black Moon Lilith, which rule no sign and therefore hold no dignity at all, so an absent field and peregrine are different answers. Derived by sign only, so triplicity, bounds and face are not considered. Always English, whatever the lang parameter says, so it stays safe to compare against in code. The four dignity signs behind it are published per body by GET /planet-meanings/{id}. */ dignity?: 'domicile' | 'exaltation' | 'detriment' | 'fall' | 'peregrine'; /** * Planet-in-sign-in-house interpretation. Narrative analysis of what this placement means in the natal chart. */ interpretation?: { /** * One-sentence interpretation of this planet in its sign and house placement. */ summary: string; /** * Multi-sentence detailed interpretation with personality insights. */ detailed: string; /** * Key personality traits and themes for this placement. */ keywords: Array; }; }>; /** * All 12 house cusps with zodiac positions. House cusps divide the chart into life areas. */ houses: Array<{ /** * House number (1-12). */ number: number; /** * Ecliptic longitude of this house cusp (0-360). */ longitude: number; /** * Zodiac sign on this house cusp. Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name on this cusp in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; }>; /** * House system used for this chart (placidus, whole-sign, equal, or koch). */ houseSystem: string; /** * All planetary aspects found in this chart with orbs, strength, and interpretation. */ aspects: Array<{ /** * First planet in the aspect pair. Always English, whatever the lang parameter says. Use planet1Localized for anything a reader sees. */ planet1: string; /** * First planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planet1Localized?: string; /** * Second planet in the aspect pair. Always English, whatever the lang parameter says. Use planet2Localized for anything a reader sees. */ planet2: string; /** * Second planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planet2Localized?: string; /** * Aspect type (CONJUNCTION, OPPOSITION, TRINE, SQUARE, SEXTILE, etc.). Always English, whatever the lang parameter says. Use typeLocalized for anything a reader sees. */ type: string; /** * Aspect type name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ typeLocalized?: string; /** * Exact angle of this aspect type in degrees. */ angle: number; /** * Distance from exact aspect in degrees. Tighter orb means stronger influence. */ orb: number; /** * Whether the aspect is applying (growing stronger) or separating (fading). */ isApplying: boolean; /** * Aspect strength percentage (0-100) based on orb tightness. */ strength: number; /** * Aspect nature: harmonious, challenging, or neutral. Always English, whatever the lang parameter says, because it is an identifier to compare and style on. Read aspectInterpretation for the sentence a reader sees. */ interpretation: string; /** * Narrative interpretation of this aspect for this chart. The reference description of the aspect TYPE is not repeated per row, use GET or POST /astrology/aspects for that card. */ aspectInterpretation: { /** * One-sentence read of THIS pair: which two bodies, how tight the aspect is, whether it is applying or separating, and how it is classified. Translated in place, so it arrives in the requested language. */ summary: string; /** * Themes this aspect activates between the two bodies. Translated in place, so they arrive in the requested language. */ keywords: Array; }; }>; /** * Detected multi-planet aspect configurations (Grand Trine, Kite, T-Square, Grand Cross, Yod, Mystic Rectangle, Stellium). Grand Cross suppresses contained T-Squares, Kite suppresses underlying Grand Trine. */ patterns?: Array<{ /** * Pattern kind identifier. GRAND_TRINE (3 trines, harmonious flow), KITE (Grand Trine with a focal outlet planet), T_SQUARE (opposition with squared apex, growth engine), GRAND_CROSS (4 planets in 2 oppositions and 4 squares, peak tension), YOD (Finger of Fate, fated adjustment), MYSTIC_RECTANGLE (oppositions softened by trines and sextiles), STELLIUM (3+ planets clustered in a sign or 10-degree arc). */ kind: 'GRAND_TRINE' | 'KITE' | 'T_SQUARE' | 'GRAND_CROSS' | 'YOD' | 'MYSTIC_RECTANGLE' | 'STELLIUM'; /** * Human-readable name of the configuration as used in astrological literature. */ name: string; /** * Participating bodies in canonical order. For Kite, T-Square, and Yod the apex planet appears first. */ planets: Array; /** * Focal planet for Kite, T-Square, and Yod patterns. Receives the released energy of the configuration and is the recommended integration point. */ apex?: string; /** * Dominant element when the pattern is element-coherent (Grand Trine, Kite). Reported lowercase. Absent for patterns whose meaning does not pivot on element. */ element?: 'fire' | 'earth' | 'air' | 'water'; /** * Dominant modality for tension-based patterns (T-Square, Grand Cross). Cardinal initiates, Fixed sustains, Mutable adapts. */ modality?: 'cardinal' | 'fixed' | 'mutable'; /** * True if the pattern is out-of-sign (one or more planets in a neighboring element or modality). Dissociate patterns are still valid but operate with weakened thematic coherence. */ dissociate?: boolean; /** * Tightness score (0-100) derived from the average orb tightness across all defining aspects. Higher means closer to exact and stronger thematic expression. */ tightness: number; /** * Concise one-line interpretation naming the participating planets and theme. Localized to the requested language via the lang query parameter (defaults to English). */ interpretation: string; /** * Stable template identifier used to render the interpretation. Useful for clients that wish to swap in a custom narrative template while preserving the structured variables. */ interpretationKey: string; /** * Variables that were interpolated into the interpretation template. Names already resolved to the requested language where appropriate. */ interpretationVars: { [key: string]: string; }; }>; /** * Aspect pattern analysis showing the balance of harmonious vs challenging energies in the chart. */ aspectsInterpretation: { /** * Narrative summary of the overall aspect pattern in this chart. */ summary: string; /** * Whether the chart is predominantly harmonious, challenging, or balanced. */ dominant: string; /** * Count of harmonious aspects (trine, sextile). */ harmonious: number; /** * Count of challenging aspects (square, opposition). */ challenging: number; /** * Count of neutral aspects (conjunction). */ neutral: number; }; /** * Ascendant (rising sign). The eastern horizon at birth, defining outward personality and physical appearance. */ ascendant: { /** * Zodiac sign on the Ascendant (rising sign). Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Ascendant sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree within the Ascendant sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Ascendant (0-360). */ longitude: number; }; /** * Midheaven (MC). The highest point of the ecliptic at birth, representing career direction and public image. */ midheaven: { /** * Zodiac sign on the Midheaven (MC). Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Midheaven sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree within the Midheaven sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Midheaven (0-360). */ longitude: number; }; /** * Part of Fortune (Lot of Fortune). A point derived from the Ascendant and the two luminaries that marks an area of ease, vitality, and material wellbeing in the chart. */ partOfFortune: { /** * Zodiac sign holding the Part of Fortune. */ sign: string; /** * Degree within the Part of Fortune sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Part of Fortune (0-360). */ longitude: number; /** * House containing this point, resolved against the same cusps as `planets[].house` and using the requested house system. Read this field rather than inferring a house from the sign: the two disagree whenever a house spans more than one sign, which is most of the time outside Whole Sign. */ house: number; /** * Chart sect used for the calculation. Day (diurnal) when the Sun is above the horizon, night (nocturnal) when below. Day charts use Ascendant plus Moon minus Sun, night charts use Ascendant plus Sun minus Moon. */ sect: 'day' | 'night'; /** * Part of Fortune sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; }; /** * Vertex. The western intersection of the prime vertical with the ecliptic, often read as a point of fated encounters and turning-point relationships. The opposite point is the Anti-Vertex. */ vertex: { /** * Zodiac sign holding the Vertex. */ sign: string; /** * Degree within the Vertex sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Vertex (0-360). */ longitude: number; /** * House containing this point, resolved against the same cusps as `planets[].house` and using the requested house system. Read this field rather than inferring a house from the sign: the two disagree whenever a house spans more than one sign, which is most of the time outside Whole Sign. */ house: number; /** * Vertex sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; }; /** * Chart summary with dominant element, modality, retrograde planets, and distribution analysis. */ summary: { /** * Most represented element in the chart (Fire, Earth, Air, Water). Always English, whatever the lang parameter says. Use dominantElementLocalized for anything a reader sees. */ dominantElement: string; /** * Element name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ dominantElementLocalized?: string; /** * Most represented modality in the chart (Cardinal, Fixed, Mutable). Always English, whatever the lang parameter says. Use dominantModalityLocalized for anything a reader sees. */ dominantModality: string; /** * Modality name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ dominantModalityLocalized?: string; /** * Planets in retrograde motion at the time of birth. Always English, whatever the lang parameter says. Use retrogradePlanetsLocalized for anything a reader sees. */ retrogradePlanets: Array; /** * The same retrograde bodies in the requested language, for display only. Index aligned with retrogradePlanets, so entry n of one names entry n of the other. Present only when lang is set to a language other than English, since in English it would repeat retrogradePlanets exactly. */ retrogradePlanetsLocalized?: Array; /** * Count of planets in each element. Shows elemental emphasis in the personality. */ elementDistribution: { [key: string]: number; }; /** * Count of planets in each modality. Shows the dominant operating mode. */ modalityDistribution: { [key: string]: number; }; }; }; export type NatalChartRequest = { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; /** * House system for dividing the chart into 12 houses. Placidus (default) is most popular in Western astrology and time-sensitive. Whole Sign assigns one sign per house (simpler, ancient). Equal houses divide chart into 30° segments from Ascendant. Koch emphasizes houses in high latitudes. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; export type HousesResponse = { /** * Input date used for this house cusp calculation. */ date: string; /** * Input time used for this house cusp calculation. */ time: string; /** * Observer latitude used for horizon-based house calculations. */ latitude: number; /** * Observer longitude used for local sidereal time. */ longitude: number; /** * Timezone offset from UTC applied to this calculation. */ timezone: number; /** * House system used for this calculation (placidus, whole-sign, equal, koch, or all). */ houseSystem: string; /** * Ascendant (rising sign) position. The eastern horizon point at the moment of birth, defining personality expression and physical appearance in Western astrology. */ ascendant: { /** * Zodiac sign on the Ascendant (rising sign). Determines the first house cusp. */ sign: string; /** * Degree within the Ascendant sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Ascendant in degrees (0-360). */ longitude: number; }; /** * Midheaven (MC) position. The highest point of the ecliptic at birth, representing career aspirations and public image in natal astrology. */ midheaven: { /** * Zodiac sign on the Midheaven (MC). Indicates career direction and public reputation. */ sign: string; /** * Degree within the Midheaven sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Midheaven in degrees (0-360). */ longitude: number; }; /** * All 12 house cusps with their zodiac positions. House cusps divide the chart into life areas: identity (1st), resources (2nd), communication (3rd), home (4th), creativity (5th), health (6th), partnerships (7th), transformation (8th), philosophy (9th), career (10th), community (11th), spirituality (12th). */ houses: Array<{ /** * House number (1-12). Each house governs specific life areas. */ number: number; /** * Ecliptic longitude of this house cusp in degrees (0-360). */ longitude: number; /** * Zodiac sign on this house cusp. */ sign: string; /** * Degree within the zodiac sign on this cusp (0-29.999). */ degree: number; }>; /** * Side-by-side house cusp comparison across all four systems (Placidus, Whole Sign, Equal, Koch). Only included when houseSystem is set to "all". Useful for educational tools and system comparison. */ comparison?: { [key: string]: { /** * All 12 house cusps as this system computes them. Compare the same house number across the four keys to see how far the systems disagree, which is largest at high latitudes and for the intermediate cusps. */ houses: Array<{ /** * House number (1-12). Each house governs specific life areas. */ number: number; /** * Ecliptic longitude of this house cusp in degrees (0-360), as this house system places it. */ longitude: number; /** * Zodiac sign on this house cusp in this house system. */ sign: string; /** * Degree within the zodiac sign on this cusp (0-29.999). */ degree: number; }>; }; }; }; export type AspectsResponse = { /** * Date used for this aspect calculation (YYYY-MM-DD). */ date: string; /** * Time used for this calculation (HH:MM:SS). */ time: string; /** * Timezone offset from UTC in decimal hours. */ timezone: number; /** * Total number of aspects found after any filters applied. */ aspectsFound: number; /** * All aspects found between the specified planets, with strength, orb, and interpretation. */ aspects: Array<{ /** * First planet in the aspect pair. Always English, whatever the lang parameter says. Use planet1Localized for anything a reader sees. */ planet1: string; /** * First planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planet1Localized?: string; /** * Second planet in the aspect pair. Always English, whatever the lang parameter says. Use planet2Localized for anything a reader sees. */ planet2: string; /** * Second planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planet2Localized?: string; /** * Aspect type (CONJUNCTION, OPPOSITION, TRINE, SQUARE, SEXTILE, etc.). Always English, whatever the lang parameter says. Use typeLocalized for anything a reader sees. */ type: string; /** * Aspect type name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ typeLocalized?: string; /** * Exact angle defining this aspect type in degrees. */ angle: number; /** * Distance from exact aspect in degrees. Tighter orb means stronger influence. */ orb: number; /** * Whether the aspect is applying (growing stronger) or separating (fading). */ isApplying: boolean; /** * Aspect strength (0-100) based on orb tightness. */ strength: number; /** * Aspect nature for this pair: harmonious, challenging, or neutral. Always English, whatever the lang parameter says, because it is an identifier to compare and style on. This is the field to branch on; meaning.nature is the reference card characterisation of the aspect type and is translated for display. */ interpretation: string; /** * Aspect meaning with keywords, description, and nature classification. */ meaning?: { /** * Aspect display name. */ name: string; /** * Aspect meaning in short and long form. */ description: { /** * Brief aspect description. */ short: string; /** * Detailed aspect description with astrological context. */ long: string; }; /** * Keywords associated with this aspect type. */ keywords: Array; /** * How this aspect type is characterised in its reference card, in the requested language, exactly like the name, description and keywords beside it. This is a property of the aspect TYPE, so branch on the aspect-level interpretation field instead, which is always English and is the classification applied to this particular pair. */ nature: string; }; }>; /** * Detected multi-planet aspect configurations (Grand Trine, Kite, T-Square, Grand Cross, Yod, Mystic Rectangle, Stellium). */ patterns?: Array<{ /** * Pattern kind identifier. GRAND_TRINE (3 trines, harmonious flow), KITE (Grand Trine with a focal outlet planet), T_SQUARE (opposition with squared apex, growth engine), GRAND_CROSS (4 planets in 2 oppositions and 4 squares, peak tension), YOD (Finger of Fate, fated adjustment), MYSTIC_RECTANGLE (oppositions softened by trines and sextiles), STELLIUM (3+ planets clustered in a sign or 10-degree arc). */ kind: 'GRAND_TRINE' | 'KITE' | 'T_SQUARE' | 'GRAND_CROSS' | 'YOD' | 'MYSTIC_RECTANGLE' | 'STELLIUM'; /** * Human-readable name of the configuration as used in astrological literature. */ name: string; /** * Participating bodies in canonical order. For Kite, T-Square, and Yod the apex planet appears first. */ planets: Array; /** * Focal planet for Kite, T-Square, and Yod patterns. Receives the released energy of the configuration and is the recommended integration point. */ apex?: string; /** * Dominant element when the pattern is element-coherent (Grand Trine, Kite). Reported lowercase. Absent for patterns whose meaning does not pivot on element. */ element?: 'fire' | 'earth' | 'air' | 'water'; /** * Dominant modality for tension-based patterns (T-Square, Grand Cross). Cardinal initiates, Fixed sustains, Mutable adapts. */ modality?: 'cardinal' | 'fixed' | 'mutable'; /** * True if the pattern is out-of-sign (one or more planets in a neighboring element or modality). Dissociate patterns are still valid but operate with weakened thematic coherence. */ dissociate?: boolean; /** * Tightness score (0-100) derived from the average orb tightness across all defining aspects. Higher means closer to exact and stronger thematic expression. */ tightness: number; /** * Concise one-line interpretation naming the participating planets and theme. Localized to the requested language via the lang query parameter (defaults to English). */ interpretation: string; /** * Stable template identifier used to render the interpretation. Useful for clients that wish to swap in a custom narrative template while preserving the structured variables. */ interpretationKey: string; /** * Variables that were interpolated into the interpretation template. Names already resolved to the requested language where appropriate. */ interpretationVars: { [key: string]: string; }; }>; /** * Aspect summary with counts by nature and type. */ summary: { /** * Total aspects found. */ totalAspects: number; /** * Count of harmonious aspects (trine, sextile). */ harmonious: number; /** * Count of challenging aspects (square, opposition). */ challenging: number; /** * Count of neutral aspects (conjunction). */ neutral: number; /** * Aspect count grouped by type. */ byType: { [key: string]: number; }; }; }; export type AspectsRequest = { /** * Date in YYYY-MM-DD format */ date: string; /** * Time in HH:MM:SS format (24-hour) */ time: string; /** * Timezone offset from UTC in decimal hours (NOT minutes format). Examples: New York EST = -5, India IST = 5.5 (NOT 5:30), Tokyo JST = 9. IMPORTANT: Use decimal format (5.5, not 5:30). */ timezone: number | string; /** * Optional: specific bodies to calculate aspects for (defaults to all 14: the 10 classical planets, the lunar nodes, Chiron, and Black Moon Lilith) */ planets?: Array; /** * Optional: specific aspect types to find (defaults to all 9) */ aspectTypes?: Array; }; export type AspectPatternsResponse = { /** * All aspect patterns detected in the chart, in detection order: Grand Cross first, then Kite, Grand Trine, T-Square, Yod, Mystic Rectangle, Stellium. Patterns absorbed by a higher-priority detection (T-Squares inside a Grand Cross, Grand Trines absorbed by a Kite) are not reported separately. */ patterns: Array<{ /** * Pattern kind identifier. GRAND_TRINE (3 trines, harmonious flow), KITE (Grand Trine with a focal outlet planet), T_SQUARE (opposition with squared apex, growth engine), GRAND_CROSS (4 planets in 2 oppositions and 4 squares, peak tension), YOD (Finger of Fate, fated adjustment), MYSTIC_RECTANGLE (oppositions softened by trines and sextiles), STELLIUM (3+ planets clustered in a sign or 10-degree arc). */ kind: 'GRAND_TRINE' | 'KITE' | 'T_SQUARE' | 'GRAND_CROSS' | 'YOD' | 'MYSTIC_RECTANGLE' | 'STELLIUM'; /** * Human-readable name of the configuration as used in astrological literature. */ name: string; /** * Participating bodies in canonical order. For Kite, T-Square, and Yod the apex planet appears first. */ planets: Array; /** * Focal planet for Kite, T-Square, and Yod patterns. Receives the released energy of the configuration and is the recommended integration point. */ apex?: string; /** * Dominant element when the pattern is element-coherent (Grand Trine, Kite). Reported lowercase. Absent for patterns whose meaning does not pivot on element. */ element?: 'fire' | 'earth' | 'air' | 'water'; /** * Dominant modality for tension-based patterns (T-Square, Grand Cross). Cardinal initiates, Fixed sustains, Mutable adapts. */ modality?: 'cardinal' | 'fixed' | 'mutable'; /** * True if the pattern is out-of-sign (one or more planets in a neighboring element or modality). Dissociate patterns are still valid but operate with weakened thematic coherence. */ dissociate?: boolean; /** * Tightness score (0-100) derived from the average orb tightness across all defining aspects. Higher means closer to exact and stronger thematic expression. */ tightness: number; /** * Concise one-line interpretation naming the participating planets and theme. Localized to the requested language via the lang query parameter (defaults to English). */ interpretation: string; /** * Stable template identifier used to render the interpretation. Useful for clients that wish to swap in a custom narrative template while preserving the structured variables. */ interpretationKey: string; /** * Variables that were interpolated into the interpretation template. Names already resolved to the requested language where appropriate. */ interpretationVars: { [key: string]: string; }; }>; /** * Total number of detected aspect patterns in this chart. */ total: number; /** * Echo of the options used for this detection run. Useful for reproducibility and for downstream UI display. */ options: { /** * Whether the strict (Pontopia-style) orb budget was used. False uses industry-standard orbs (8 for major aspects, 9 for square, 6 for sextile, 3 for quincunx). */ strictOrbs: boolean; /** * Optional bodies included beyond the default Sun-Pluto set. Empty means classical 10-planet detection only. */ include: Array<'chiron' | 'northNode'>; }; }; export type AspectPatternsRequest = { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; export type TransitsResponse = { /** * Date of the transit calculation (YYYY-MM-DD). */ transitDate: string; /** * Time of the transit calculation (HH:MM:SS, 24-hour). */ transitTime: string; /** * Timezone offset from UTC in hours used for this calculation. */ timezone: number; /** * Current positions of all 14 celestial bodies (10 classical planets, lunar nodes, Chiron, Black Moon Lilith) in the tropical zodiac. Use for daily transit tracking, horoscope generation, and aspect monitoring. */ transitPlanets: Array<{ /** * Planet name (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, North Node, South Node, Chiron, Black Moon Lilith). Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use nameLocalized for anything a reader sees. The lunar nodes are the mean node; software using the true node may show node positions up to 1.75 degrees different. */ name: string; /** * Planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Tropical ecliptic longitude in degrees (0-360). Primary coordinate for sign and aspect calculation. */ longitude: number; /** * Ecliptic latitude in degrees. Near zero for most planets except Moon and Pluto. */ latitude: number; /** * Tropical zodiac sign the planet currently occupies. Changes when longitude crosses a 30-degree boundary. Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree within the current zodiac sign (0-29.999). Indicates how far into the sign the planet has progressed. */ degree: number; /** * Daily motion in degrees per day. Negative values indicate retrograde motion. */ speed: number; /** * Whether the planet is currently in apparent retrograde motion. Retrograde transits are considered more introspective and revisionary. */ isRetrograde: boolean; }>; /** * Transit-to-natal aspects (only included when natalChart is provided in the request). Shows which transiting planets are aspecting natal planets. */ transitAspects?: Array<{ /** * Transiting planet forming the aspect. Always English, whatever the lang parameter says. Use transitPlanetLocalized for anything a reader sees. */ transitPlanet: string; /** * Transiting planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ transitPlanetLocalized?: string; /** * Natal planet being aspected. Always English, whatever the lang parameter says. Use natalPlanetLocalized for anything a reader sees. */ natalPlanet: string; /** * Natal planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ natalPlanetLocalized?: string; /** * Aspect type (CONJUNCTION, OPPOSITION, TRINE, SQUARE, SEXTILE, etc.). Always English, whatever the lang parameter says. Use typeLocalized for anything a reader sees. */ type: string; /** * Aspect type name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ typeLocalized?: string; /** * Exact angle of this aspect type in degrees. */ angle: number; /** * Distance from exact aspect in degrees. Tighter orb = stronger influence. */ orb: number; /** * Whether the transiting planet is moving toward exactitude (applying) or away from it (separating). Applying aspects grow stronger. */ isApplying: boolean; /** * Aspect strength percentage (0-100) based on orb tightness, where 100 is exact. */ strength: number; /** * Aspect nature: harmonious (trine, sextile), challenging (square, opposition), or neutral (conjunction). */ nature: string; /** * Rich interpretation of the transit aspect including narrative summary, timing, impact assessment, practical guidance, and keywords. */ interpretation: { /** * Narrative interpretation of what this transit aspect means and how it manifests. */ summary: string; /** * How long this transit influence lasts, localized. The bucket follows the speed of the transiting body: a few hours for the Moon, a few days for the Sun, Mercury, Venus and Mars, one to two weeks for Jupiter, several weeks for Saturn, and an extended period for Uranus, Neptune and Pluto. */ timing: string; /** * Strength and nature of the transit impact on your natal chart. */ impact: string; /** * Practical advice for working with or navigating this transit energy. */ guidance: string; /** * Key themes activated by this transit aspect. */ keywords: Array; }; }>; /** * Transit aspect summary counts (only included when natalChart is provided). Quick overview of the current transit weather. */ summary?: { /** * Total transit-to-natal aspects found. */ totalAspects: number; /** * Count of harmonious aspects (trine, sextile). */ harmonious: number; /** * Count of challenging aspects (square, opposition). */ challenging: number; /** * Count of neutral aspects (conjunction). */ neutral: number; }; }; export type TransitsRequest = { /** * Transit date in YYYY-MM-DD format (defaults to current date) */ date?: string; /** * Transit time in HH:MM:SS format (defaults to current time) */ time?: string; /** * Transit timezone: decimal hours from UTC OR IANA name (e.g. "America/New_York"). IANA resolved to the DST-correct offset for the transit date. Defaults to 0 (UTC). */ timezone?: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; /** * Optional natal chart data to compare transits against */ natalChart?: { /** * Date in YYYY-MM-DD format. A single-digit month or day is accepted and zero-padded (2026-3-5 becomes 2026-03-05). Impossible calendar dates are rejected. */ date: string; /** * Time in 24-hour format. Seconds are optional and default to 00 (14:30 becomes 14:30:00); a single-digit hour is zero-padded. Out-of-range values are rejected. */ time: string; /** * Natal birth latitude in decimal degrees, positive north. Sets the local sidereal time behind the natal Ascendant and house cusps that the transits are measured against. */ latitude: number; /** * Natal birth longitude in decimal degrees, positive east and negative west. Example: New York -74.0060, London -0.1276, Sydney 151.2093. */ longitude: number; /** * Natal timezone: decimal hours OR IANA name (e.g. "America/New_York"). IANA resolved to the DST-correct offset for the natal date. */ timezone: number | string; }; }; export type AstrocartographyResponse = { /** * Echo of the birth moment and place used to compute every planetary line. */ birthDetails: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * One entry per body, each carrying its Midheaven, Imum Coeli, Ascendant, and Descendant planetary lines for relocation mapping. */ lines: Array<{ /** * Celestial body this set of planetary lines belongs to. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use planetLocalized for anything a reader sees. */ planet: string; /** * Body name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planetLocalized?: string; /** * Unicode astronomical symbol for this body. */ symbol?: string; /** * Equatorial right ascension of the body in degrees (0 to 360), the basis for every line. */ rightAscension: number; /** * Equatorial declination of the body in degrees (-90 to 90), which sets how far the rising and setting lines curve. */ declination: number; /** * Midheaven (MC) line. Places along this meridian where the body was culminating overhead, tied to public life, career, and reputation. */ mc: { /** * Constant geographic longitude of this vertical meridian line in decimal degrees. The body culminates (MC) along it, so plot it as a straight north to south line. */ longitude: number; /** * Plain language meaning of this Midheaven planetary line for relocation, suitable for chart reports and AI agents. */ interpretation: string; }; /** * Imum Coeli (IC) line, opposite the MC. Places where the body was anti-culminating, tied to home, family, and inner foundations. */ ic: { /** * Constant geographic longitude of this vertical meridian line in decimal degrees. The body anti-culminates (IC) along it, so plot it as a straight north to south line. */ longitude: number; /** * Plain language meaning of this Imum Coeli planetary line for relocation, suitable for chart reports and AI agents. */ interpretation: string; }; /** * Ascendant (rising) line. Places where the body was on the eastern horizon, tied to identity, vitality, and self-expression. */ ascendant: { /** * Sampled geographic points tracing this rising line from 70 South to 70 North. Join them in latitude order to draw the curved planetary line on a world map. */ points: Array<{ /** * Geographic latitude of this sampled point in decimal degrees. */ latitude: number; /** * Geographic longitude in decimal degrees where the body sits exactly on the eastern (rising) horizon at this latitude. */ longitude: number; }>; /** * Absolute latitude in degrees beyond which the body never crosses the horizon, so the line has no points past it. Null when the line spans the full sampled range. */ circumpolarBeyond: number | null; /** * Plain language meaning of this rising (Ascendant) planetary line for relocation, suitable for chart reports and AI agents. */ interpretation: string; }; /** * Descendant (setting) line. Places where the body was on the western horizon, tied to relationships and partnerships. */ descendant: { /** * Sampled geographic points tracing this setting line from 70 South to 70 North. Join them in latitude order to draw the curved planetary line on a world map. */ points: Array<{ /** * Geographic latitude of this sampled point in decimal degrees. */ latitude: number; /** * Geographic longitude in decimal degrees where the body sits exactly on the western (setting) horizon at this latitude. */ longitude: number; }>; /** * Absolute latitude in degrees beyond which the body never crosses the horizon, so the line has no points past it. Null when the line spans the full sampled range. */ circumpolarBeyond: number | null; /** * Plain language meaning of this setting (Descendant) planetary line for relocation, suitable for chart reports and AI agents. */ interpretation: string; }; }>; /** * Short overview of the astrocartography map for previews and report intros. */ summary: string; }; export type RelocationChartResponse = { /** * Birthplace details echoed back. The birth instant is unchanged by relocation. */ birthDetails: { /** * Birth date used for this chart (YYYY-MM-DD). */ date: string; /** * Birth time used for this chart (HH:MM:SS, 24-hour). */ time: string; /** * Birthplace latitude in decimal degrees. */ latitude: number; /** * Birthplace longitude in decimal degrees. */ longitude: number; /** * Birth timezone offset from UTC in decimal hours. */ timezone: number; }; /** * New location the chart was recomputed for. */ relocation: { /** * New location latitude in decimal degrees. */ latitude: number; /** * New location longitude in decimal degrees. */ longitude: number; }; /** * All 14 celestial bodies with their unchanged natal signs and degrees, reassigned to the houses they occupy in the relocated chart. */ planets: Array; /** * All 12 relocated house cusps with zodiac positions for the new location. */ houses: Array<{ /** * House number (1-12). Each house governs specific life themes in Western astrology. */ number: number; /** * Ecliptic longitude of this house cusp in degrees (0-360). */ longitude: number; /** * Zodiac sign on this house cusp. Colors the themes of this life area. */ sign: string; /** * Degree within the zodiac sign on this cusp (0-29.999). */ degree: number; /** * Zodiac sign name on this cusp in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; }>; /** * House system used for the relocated chart (placidus, whole-sign, equal, or koch). Quadrant systems fall back to whole-sign above the polar circle. */ houseSystem: string; /** * Relocated Ascendant (rising sign). The eastern horizon at the new place, defining how you come across there. */ ascendant: { /** * Tropical zodiac sign on this relocated angle. Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name on this angle in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree within the zodiac sign on this angle (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of this angle in degrees (0-360). */ longitude: number; }; /** * Relocated Midheaven (MC). The highest point of the ecliptic at the new place, tied to career and public image there. */ midheaven: { /** * Tropical zodiac sign on this relocated angle. Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name on this angle in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree within the zodiac sign on this angle (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of this angle in degrees (0-360). */ longitude: number; }; /** * Relocated Vertex. The western prime-vertical and ecliptic intersection at the new place, read as a point of fated encounters. */ vertex: { /** * Zodiac sign holding the Vertex. */ sign: string; /** * Degree within the Vertex sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Vertex (0-360). */ longitude: number; /** * House containing this point, resolved against the same cusps as `planets[].house` and using the requested house system. Read this field rather than inferring a house from the sign: the two disagree whenever a house spans more than one sign, which is most of the time outside Whole Sign. */ house: number; /** * Vertex sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; }; /** * How relocation reshapes the chart: Ascendant shift, planets that change house, angular planets, and the move geometry from the birthplace. */ changes: { /** * Whether the Ascendant sign differs between the birthplace chart and the relocated chart. */ ascendantSignChanged: boolean; /** * Bodies whose house placement shifts from the birthplace chart to the relocated chart. Empty when nothing changes house. */ planetsChangedHouse: Array<{ /** * Body that occupies a different house after relocation. Always English, whatever the lang parameter says. Use planetLocalized for anything a reader sees. */ planet: string; /** * Body name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planetLocalized?: string; /** * House this body occupied in the birthplace chart (1-12). */ natalHouse: number; /** * House this body occupies in the relocated chart (1-12). */ relocatedHouse: number; }>; /** * Bodies within three degrees of a relocated angle (Ascendant, Imum Coeli, Descendant, or Midheaven), where their influence is strongest at this location. Always English, whatever the lang parameter says. Use angularPlanetsLocalized for anything a reader sees. */ angularPlanets: Array; /** * The same angular bodies in the requested language, for display only. Index aligned with angularPlanets. Present only when lang is set to a language other than English. */ angularPlanetsLocalized?: Array; /** * Great-circle distance from the birthplace to the new location in kilometers. */ distanceKm: number; /** * Compass direction (16-point) from the birthplace to the new location. */ direction: string; }; /** * Relocation interpretation summary. */ interpretation: { /** * Narrative summary of the relocation: the new Ascendant and Midheaven signs and any planets that move onto the angles. Localized via the lang query parameter. */ summary: string; }; }; export type RelocationPlanet = { /** * Body name. One of the 10 classical planets (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto), the lunar nodes (North Node, South Node), Chiron, or Black Moon Lilith (the mean lunar apogee). The nodes follow the request `nodeType`, which defaults to the true (osculating) node; pass "mean" for the smoothed node. The two differ by up to about 1.8 degrees and no other body is affected. */ name: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Tropical ecliptic longitude in degrees (0-360). Primary coordinate for zodiac sign and aspect calculations. */ longitude: number; /** * Ecliptic latitude in degrees. Near zero for most planets, varies for the Moon and Pluto, and reaches up to about 5 degrees for Black Moon Lilith (projected from the inclined mean lunar orbit). */ latitude: number; /** * Tropical zodiac sign this planet occupies. Determined by 30-degree divisions of ecliptic longitude. */ sign: string; /** * Degree within the zodiac sign (0-29.999). Indicates how far the planet has progressed through the sign. */ degree: number; /** * House placement (1-12). Determined by the selected house system and birth location. */ house: number; /** * Daily motion in degrees per day. Negative values indicate retrograde motion. */ speed: number; /** * Whether the planet appears to move backward from Earth perspective. Retrograde periods signal review and introspection. */ isRetrograde: boolean; /** * Body name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Zodiac sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Relocated placement interpretation. The planet keeps its natal sign, so this reads its meaning through the new house it occupies at this location. */ interpretation?: { /** * One-sentence interpretation of this planet in its sign and relocated house. */ summary: string; /** * Multi-sentence interpretation of this relocated placement. */ detailed: string; /** * Key themes for this relocated placement. */ keywords: Array; }; }; export type RelocationChartRequest = { /** * Birth date in YYYY-MM-DD format. The birth moment is unchanged by relocation, so this still defines the planetary positions of the chart. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Combined with the timezone it fixes the exact birth instant, which the relocated angles and houses are recomputed for. */ time: string; /** * Birth timezone: decimal hours from UTC (e.g. -5 for EST, 5.5 for IST) OR IANA name (e.g. "America/New_York"). Resolved to the DST-correct offset for the birth date. This is the birthplace timezone, not the new location timezone. */ timezone: number | string; /** * Birthplace latitude in decimal degrees (-90 to 90). Used for the original natal angles and houses that the relocated chart is compared against. */ birthLatitude: number; /** * Birthplace longitude in decimal degrees (-180 to 180). Positive East, negative West. */ birthLongitude: number; /** * New location latitude in decimal degrees (-90 to 90). The relocated Ascendant and house cusps are most sensitive to north-south movement. */ relocationLatitude: number; /** * New location longitude in decimal degrees (-180 to 180). The relocated Midheaven shifts roughly one degree per degree of longitude moved. */ relocationLongitude: number; /** * House system for dividing the relocated chart into 12 houses. Placidus (default) is time-sensitive and most popular in Western astrology. Whole Sign assigns one sign per house. Equal divides into 30 degree segments from the Ascendant. Koch emphasizes higher latitudes. Quadrant systems fall back to Whole Sign above the polar circle. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; export type LocalSpaceResponse = { /** * The birthplace and birth instant the map was computed for. */ birthDetails: { /** * Birth date echoed from the request. */ date: string; /** * Birth time echoed from the request. */ time: string; /** * Birthplace latitude, the origin of every local space line. */ latitude: number; /** * Birthplace longitude, the origin of every local space line. */ longitude: number; /** * Timezone offset from UTC applied to the birth instant. */ timezone: number; }; /** * Every requested body with its horizon direction, altitude, compass direction, great-circle line, and interpretation. */ bodies: Array<{ /** * Body name (Sun, Moon, Mercury through Pluto, plus North Node, Chiron, or Black Moon Lilith when requested). Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use planetLocalized for anything a reader sees. */ planet: string; /** * Body name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planetLocalized?: string; /** * Unicode astronomical symbol for this body. */ symbol?: string; /** * Compass bearing of the body as seen from the birthplace, in degrees clockwise from true north (0 = north, 90 = east, 180 = south, 270 = west). This is the direction the local space line points. */ azimuth: number; /** * Angular height of the body above (positive) or below (negative) the local horizon at birth, in degrees (-90 to 90). */ altitude: number; /** * Nearest 16-point compass abbreviation for the azimuth (N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW). */ compassDirection: string; /** * True when the body is above the local horizon (altitude greater than 0) at the birth moment. */ aboveHorizon: boolean; /** * The great-circle directional line for this body, ready to plot on a map. */ line: { /** * Ordered latitude and longitude waypoints tracing the great-circle local space line from the birthplace along the body azimuth. The first point is the birthplace itself. */ points: Array<{ /** * Waypoint latitude in decimal degrees. */ latitude: number; /** * Waypoint longitude in decimal degrees. */ longitude: number; }>; }; /** * Plain-language reading of what travelling or facing along this body line tends to emphasize. Localized when a translation exists. */ interpretation: string; }>; /** * One-line overview of the local space map. */ summary: string; }; export type FixedStarsResponse = { /** * Echo of the birth moment and place used to precess every star. */ birthDetails: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * Conjunction orb in degrees applied to detect contacts between stars and natal points. */ orb: number; /** * Every catalog star with its precessed tropical position, magnitude, traditional nature, and any conjunctions to the natal chart. */ stars: Array<{ /** * Lowercase identifier for the fixed star. */ id: string; /** * Proper name of the fixed star. */ name: string; /** * Tropical ecliptic longitude of the star in degrees (0-360), precessed from its J2000 position to the chart date. */ longitude: number; /** * Tropical zodiac sign the star currently occupies. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; /** * Apparent visual magnitude. Lower is brighter, and the brightest stars are negative. */ magnitude: number; /** * Traditional planetary nature of the star in classical astrology. */ nature: string; /** * Traditional astrological keywords associated with the star. */ keywords: Array; /** * Natal points within the chosen orb of this star. Empty when no planet or angle contacts the star. */ conjunctions: Array<{ /** * Natal point conjunct this star: a planet name, or the chart angles MC and ASC. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use pointLocalized for anything a reader sees. */ point: string; /** * Natal point name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ pointLocalized?: string; /** * Tropical ecliptic longitude of the natal point in degrees (0-360). */ pointLongitude: number; /** * Angular separation in degrees between the star and the natal point. Smaller means a tighter, stronger contact. */ orb: number; }>; }>; /** * Flat list of every star to natal point conjunction, sorted tightest first, each with an interpretation. The high-value summary of where fixed stars touch the chart. */ conjunctions: Array<{ /** * Proper name of the conjunct fixed star. */ star: string; /** * Natal point conjunct the star: a planet name, or the chart angles MC and ASC. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use pointLocalized for anything a reader sees. */ point: string; /** * Natal point name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ pointLocalized?: string; /** * Angular separation in degrees between the star and the natal point. */ orb: number; /** * Plain language meaning of this star contact, blending the star traditional nature with the chart point. Localized to the requested language. */ interpretation: string; }>; /** * Short overview of the fixed-star report for previews and report intros. */ summary: string; }; export type ArabicLotsResponse = { /** * Echo of the birth moment and place used to compute every lot. */ birthDetails: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * Chart sect that selected each formula. Day (diurnal) when the Sun is above the horizon, night (nocturnal) when below. Every lot swaps its two non-Ascendant terms between day and night. */ sect: 'day' | 'night'; /** * The seven Hermetic lots in canonical order: Part of Fortune and Part of Spirit from the luminaries, then Eros, Necessity, Courage, Victory, and Nemesis from a planet paired with Fortune or Spirit. */ lots: Array<{ /** * Stable machine identifier for the lot (fortune, spirit, eros, necessity, courage, victory, nemesis). Use this for lookups. */ id: string; /** * Name of the lot. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use nameLocalized for anything a reader sees. */ name: string; /** * Lot name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Absolute tropical ecliptic longitude of the lot in degrees (0 to 360). */ longitude: number; /** * Tropical zodiac sign the lot falls in. */ sign: string; /** * Degree of the lot within its zodiac sign (0 to 29.999). */ degree: number; /** * Human readable arc used for this chart, with the day or night term order already applied by sect. */ formula: string; /** * Plain language meaning of this lot in its sign, suitable for chart reports and AI agents. Localized to the requested language. */ interpretation: string; }>; /** * Short overview of the lot set for previews and report intros. */ summary: string; }; export type ArabicLotsRequest = { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; /** * House system used to place the Sun, which determines the chart sect (day when the Sun is above the horizon, night when below) and therefore which lot formula applies. Placidus (default), Whole Sign, Equal, or Koch. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; export type AsteroidsResponse = { /** * Echo of the birth moment and place used to compute every asteroid. */ birthDetails: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * House system actually used to place the asteroids, after any polar fallback to Whole Sign. */ houseSystem: 'placidus' | 'whole-sign' | 'equal' | 'koch'; /** * The four classical asteroid goddesses in canonical order: Ceres, Pallas, Juno, and Vesta, each with its tropical position, house, motion, and interpretation. */ asteroids: Array<{ /** * Name of the asteroid: Ceres, Pallas, Juno, or Vesta. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use nameLocalized for anything a reader sees. */ name: string; /** * Asteroid name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Absolute tropical ecliptic longitude of the asteroid in degrees (0 to 360). */ longitude: number; /** * Ecliptic latitude in degrees, the angular distance north or south of the ecliptic plane. */ latitude: number; /** * Tropical zodiac sign the asteroid falls in. */ sign: string; /** * Degree of the asteroid within its zodiac sign (0 to 29.999). */ degree: number; /** * Natal house placement (1 to 12) from the selected house system and birth location. */ house: number; /** * Daily motion in degrees per day. Negative values indicate retrograde motion. */ speed: number; /** * Whether the asteroid appears to move backward from Earth, true when the daily speed is negative. */ isRetrograde: boolean; /** * Plain language meaning of this asteroid in its sign, suitable for chart reports and AI agents. Localized to the requested language. */ interpretation: string; }>; /** * Short overview of the asteroid set for previews and report intros. */ summary: string; }; export type AsteroidsRequest = { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; /** * House system used to assign each asteroid to a natal house. Placidus (default), Whole Sign, Equal, or Koch. Above the polar circle, quadrant systems fall back to Whole Sign and the echoed houseSystem reports the system actually used. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; export type LilithResponse = { /** * Echo of the birth moment and place used to compute both Lilith variants. */ birthDetails: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * House system applied when placing each variant in a house. */ houseSystem: 'placidus' | 'whole-sign' | 'equal' | 'koch'; /** * Both Black Moon Lilith variants, the mean lunar apogee first and the true (osculating) apogee second. */ lilith: Array<{ /** * Which lunar apogee this entry describes. The mean variant is the smoothed average apogee; the true variant is the instantaneous osculating apogee. Always one of these two English literals, whatever the lang parameter says, so it stays safe to compare against in code. Use variantLocalized for anything a reader sees. */ variant: 'mean' | 'true'; /** * Apogee variant label in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ variantLocalized?: string; /** * Absolute tropical ecliptic longitude of the apogee in degrees (0 to 360). */ longitude: number; /** * Ecliptic latitude in degrees, the projection of the apogee off the ecliptic plane. Reaches up to about 5 degrees because the lunar orbit is inclined. */ latitude: number; /** * Tropical zodiac sign the apogee falls in, naming where the suppressed instinct lives. */ sign: string; /** * Degree of the apogee within its zodiac sign (0 to 29.999). */ degree: number; /** * House placement (1 to 12) in the selected house system, the area of life where the Lilith theme plays out. */ house: number; /** * Daily motion in degrees per day. The mean apogee is always positive (direct); the true apogee can be negative (retrograde). */ speed: number; /** * Whether the apogee is moving backward. Always false for the mean apogee; the true apogee turns retrograde when the osculating ellipse swings the apogee direction backward. */ isRetrograde: boolean; /** * Plain language meaning of this Lilith variant in its sign, suitable for chart reports and AI agents. Localized to the requested language. */ interpretation: string; /** * Short explanation of how this variant is defined and how it differs from the other, localized to the requested language. */ note: string; }>; /** * Short overview of both variants for previews and report intros. */ summary: string; }; export type LilithRequest = { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; /** * House system used to place each Lilith variant in a house. Placidus (default), Whole Sign, Equal, or Koch. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; export type ProgressionsResponse = { /** * Echo of the birth moment and place the progressed chart is built from. */ birthDetails: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * The requested date the chart was progressed to. */ targetDate: string; /** * UTC calendar date of the progressed moment, the ephemeris day whose real positions stand in for the target date. One day after birth per year of elapsed life. */ progressedDate: string; /** * Years elapsed between birth and the target date, measured in mean tropical years. Drives both the progressed planets and the Naibod progression of the angles. Negative values progress the chart converse (before birth). */ elapsedYears: number; /** * Every progressed body in canonical order: the 10 classical planets, the lunar nodes, Chiron, and Black Moon Lilith. The progressed Sun moves about one degree per year and the progressed Moon about one sign per two and a half years, so these two are the headline movers in any progressed reading. */ planets: Array<{ /** * Body name in canonical English. One of the 10 classical planets, the lunar nodes, Chiron, or Black Moon Lilith. Unchanged by the lang parameter, so it stays safe to compare against in code. Use nameLocalized for anything a reader sees. */ name: string; /** * Body name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Progressed tropical ecliptic longitude in degrees (0 to 360). */ longitude: number; /** * Tropical zodiac sign the progressed body falls in. Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree of the progressed body within its zodiac sign (0 to 29.999). */ degree: number; /** * Whole-sign house (1 to 12) counted from the progressed Ascendant sign. The 1st house is the entire sign the progressed Ascendant falls in. */ house: number; /** * Daily motion of the body at the progressed instant in degrees per day. Negative values indicate retrograde motion. */ speed: number; /** * Whether the body is retrograde at the progressed instant, true when the daily speed is negative. */ isRetrograde: boolean; /** * Plain language meaning of this progressed body in its sign, suitable for chart reports and AI agents. Localized to the requested language. */ interpretation: string; }>; /** * Progressed Ascendant, the rising degree advanced by the Naibod arc per year. Marks the evolving outward style and immediate environment. */ ascendant: { /** * Absolute tropical ecliptic longitude of the progressed angle in degrees (0 to 360). */ longitude: number; /** * Tropical zodiac sign the progressed angle falls in. Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name on this angle in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree of the progressed angle within its zodiac sign (0 to 29.999). */ degree: number; }; /** * Progressed Midheaven, the culminating degree advanced by the Naibod arc per year. Marks the evolving vocation and public direction. */ midheaven: { /** * Absolute tropical ecliptic longitude of the progressed angle in degrees (0 to 360). */ longitude: number; /** * Tropical zodiac sign the progressed angle falls in. Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name on this angle in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree of the progressed angle within its zodiac sign (0 to 29.999). */ degree: number; }; /** * Short overview of the progressed chart led by the progressed Sun and Moon. Localized to the requested language. */ summary: string; }; export type ProgressionsRequest = { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; /** * Date to progress the chart to, in YYYY-MM-DD format. Usually today or a forecast date. The day-for-a-year key turns the elapsed years since birth into the same number of ephemeris days after the birth moment. */ targetDate: string; }; export type SolarArcResponse = { /** * Echo of the birth moment and place used to compute the natal chart and the solar arc. */ birthDetails: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * Echo of the date the chart was directed to. */ targetDate: string; /** * The solar arc in degrees: the secondary-progressed Sun longitude minus the natal Sun longitude. Approximately one degree per year of life. Every natal point is advanced by exactly this arc. */ solarArc: number; /** * Short overview of the directed chart for previews and report intros. Localized to the requested language. */ summary: string; /** * Every natal point advanced by the solar arc: the planets and bodies in canonical order first, then the Ascendant and the Midheaven. */ directed: Array<{ /** * Name of the directed point, covering the planets and the two angles, the Ascendant and the Midheaven, alike. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use nameLocalized for anything a reader sees. */ name: string; /** * Directed point name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Absolute tropical ecliptic longitude of the point in the natal chart, in degrees (0 to 360). */ natalLongitude: number; /** * Absolute tropical ecliptic longitude after directing, in degrees (0 to 360). Equals the natal longitude plus the solar arc, normalized to a full circle. */ directedLongitude: number; /** * Tropical zodiac sign the directed point falls in. A directed point crossing into a new sign marks a developmental turning point. */ sign: string; /** * Degree of the directed point within its zodiac sign (0 to 29.999). */ degree: number; /** * Plain language meaning of this directed point, suitable for chart reports and AI agents. Localized to the requested language. */ interpretation: string; }>; }; export type SolarArcRequest = { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; /** * Date to direct the chart to, in YYYY-MM-DD format. Every natal point is advanced by the solar arc accumulated from birth to this date, about one degree for each year of life. */ targetDate: string; }; export type ProfectionsResponse = { /** * Echo of the birth moment and place used to derive the natal Ascendant and the lord of the year placement. */ birthDetails: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * Target date whose profection year was computed, echoed from the request. */ targetDate: string; /** * Completed whole years from birth to the target date. Age 0 is the birth year and profects the first house. */ age: number; /** * Profected whole sign house activated for the year (1 to 12), computed as age modulo 12 plus 1. House 1 is the rising sign and the cycle repeats every twelve years. */ profectedHouse: number; /** * Tropical zodiac sign on the profected house: the rising sign advanced by one whole sign for each completed year. */ profectedSign: string; /** * Lord of the year (annual time lord): the traditional ruling planet of the profected sign whose natal condition and transits color the themes of the year. */ lordOfYear: string; /** * Where the lord of the year sits in the birth chart: the natal sign and house that ground the theme of the profection year. */ lordNatalPosition: { /** * Zodiac sign the lord of the year occupies in the natal chart. */ sign: string; /** * Natal house the lord of the year occupies (1 to 12), in the requested house system. */ house: number; }; /** * Plain language reading of the profection year, combining the profected house theme, the profected sign, and the lord of the year. Localized to the requested language. */ interpretation: string; /** * Short overview of the profection year for previews and report intros. */ summary: string; }; export type ProfectionsRequest = { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; /** * Date whose profection year you want, in YYYY-MM-DD format. The completed whole years from the birth date to this date select the profected house and sign. Must fall on or after the birth date. */ targetDate: string; /** * House system used only to report where the lord of the year sits in the natal chart. The profected house and sign always use whole sign profection from the rising sign. Placidus (default), Whole Sign, Equal, or Koch. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; export type BirthChartResponse = { aries: { /** * Zodiac sign name in lowercase. Always equals the key of the block it sits in, so the aries block carries "aries" and the pisces block carries "pisces". */ rashi: string; /** * Planets placed in this zodiac sign. */ signs: Array<{ /** * Planet (graha) placed in this sign. */ graha: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra has 4 padas of 3 degrees 20 each. */ pada: number; /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if planet is in retrograde motion (appears to move backward). Retrograde planets have altered significations. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). Present on the D1 birth chart; divisional charts (navamsa, varga) omit it. */ house?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }>; }; taurus: { /** * Zodiac sign name in lowercase. Always equals the key of the block it sits in, so the aries block carries "aries" and the pisces block carries "pisces". */ rashi: string; /** * Planets placed in this zodiac sign. */ signs: Array<{ /** * Planet (graha) placed in this sign. */ graha: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra has 4 padas of 3 degrees 20 each. */ pada: number; /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if planet is in retrograde motion (appears to move backward). Retrograde planets have altered significations. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). Present on the D1 birth chart; divisional charts (navamsa, varga) omit it. */ house?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }>; }; gemini: { /** * Zodiac sign name in lowercase. Always equals the key of the block it sits in, so the aries block carries "aries" and the pisces block carries "pisces". */ rashi: string; /** * Planets placed in this zodiac sign. */ signs: Array<{ /** * Planet (graha) placed in this sign. */ graha: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra has 4 padas of 3 degrees 20 each. */ pada: number; /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if planet is in retrograde motion (appears to move backward). Retrograde planets have altered significations. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). Present on the D1 birth chart; divisional charts (navamsa, varga) omit it. */ house?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }>; }; cancer: { /** * Zodiac sign name in lowercase. Always equals the key of the block it sits in, so the aries block carries "aries" and the pisces block carries "pisces". */ rashi: string; /** * Planets placed in this zodiac sign. */ signs: Array<{ /** * Planet (graha) placed in this sign. */ graha: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra has 4 padas of 3 degrees 20 each. */ pada: number; /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if planet is in retrograde motion (appears to move backward). Retrograde planets have altered significations. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). Present on the D1 birth chart; divisional charts (navamsa, varga) omit it. */ house?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }>; }; leo: { /** * Zodiac sign name in lowercase. Always equals the key of the block it sits in, so the aries block carries "aries" and the pisces block carries "pisces". */ rashi: string; /** * Planets placed in this zodiac sign. */ signs: Array<{ /** * Planet (graha) placed in this sign. */ graha: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra has 4 padas of 3 degrees 20 each. */ pada: number; /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if planet is in retrograde motion (appears to move backward). Retrograde planets have altered significations. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). Present on the D1 birth chart; divisional charts (navamsa, varga) omit it. */ house?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }>; }; virgo: { /** * Zodiac sign name in lowercase. Always equals the key of the block it sits in, so the aries block carries "aries" and the pisces block carries "pisces". */ rashi: string; /** * Planets placed in this zodiac sign. */ signs: Array<{ /** * Planet (graha) placed in this sign. */ graha: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra has 4 padas of 3 degrees 20 each. */ pada: number; /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if planet is in retrograde motion (appears to move backward). Retrograde planets have altered significations. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). Present on the D1 birth chart; divisional charts (navamsa, varga) omit it. */ house?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }>; }; libra: { /** * Zodiac sign name in lowercase. Always equals the key of the block it sits in, so the aries block carries "aries" and the pisces block carries "pisces". */ rashi: string; /** * Planets placed in this zodiac sign. */ signs: Array<{ /** * Planet (graha) placed in this sign. */ graha: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra has 4 padas of 3 degrees 20 each. */ pada: number; /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if planet is in retrograde motion (appears to move backward). Retrograde planets have altered significations. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). Present on the D1 birth chart; divisional charts (navamsa, varga) omit it. */ house?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }>; }; scorpio: { /** * Zodiac sign name in lowercase. Always equals the key of the block it sits in, so the aries block carries "aries" and the pisces block carries "pisces". */ rashi: string; /** * Planets placed in this zodiac sign. */ signs: Array<{ /** * Planet (graha) placed in this sign. */ graha: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra has 4 padas of 3 degrees 20 each. */ pada: number; /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if planet is in retrograde motion (appears to move backward). Retrograde planets have altered significations. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). Present on the D1 birth chart; divisional charts (navamsa, varga) omit it. */ house?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }>; }; sagittarius: { /** * Zodiac sign name in lowercase. Always equals the key of the block it sits in, so the aries block carries "aries" and the pisces block carries "pisces". */ rashi: string; /** * Planets placed in this zodiac sign. */ signs: Array<{ /** * Planet (graha) placed in this sign. */ graha: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra has 4 padas of 3 degrees 20 each. */ pada: number; /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if planet is in retrograde motion (appears to move backward). Retrograde planets have altered significations. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). Present on the D1 birth chart; divisional charts (navamsa, varga) omit it. */ house?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }>; }; capricorn: { /** * Zodiac sign name in lowercase. Always equals the key of the block it sits in, so the aries block carries "aries" and the pisces block carries "pisces". */ rashi: string; /** * Planets placed in this zodiac sign. */ signs: Array<{ /** * Planet (graha) placed in this sign. */ graha: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra has 4 padas of 3 degrees 20 each. */ pada: number; /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if planet is in retrograde motion (appears to move backward). Retrograde planets have altered significations. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). Present on the D1 birth chart; divisional charts (navamsa, varga) omit it. */ house?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }>; }; aquarius: { /** * Zodiac sign name in lowercase. Always equals the key of the block it sits in, so the aries block carries "aries" and the pisces block carries "pisces". */ rashi: string; /** * Planets placed in this zodiac sign. */ signs: Array<{ /** * Planet (graha) placed in this sign. */ graha: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra has 4 padas of 3 degrees 20 each. */ pada: number; /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if planet is in retrograde motion (appears to move backward). Retrograde planets have altered significations. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). Present on the D1 birth chart; divisional charts (navamsa, varga) omit it. */ house?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }>; }; pisces: { /** * Zodiac sign name in lowercase. Always equals the key of the block it sits in, so the aries block carries "aries" and the pisces block carries "pisces". */ rashi: string; /** * Planets placed in this zodiac sign. */ signs: Array<{ /** * Planet (graha) placed in this sign. */ graha: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra has 4 padas of 3 degrees 20 each. */ pada: number; /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if planet is in retrograde motion (appears to move backward). Retrograde planets have altered significations. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). Present on the D1 birth chart; divisional charts (navamsa, varga) omit it. */ house?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }>; }; /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Uranus, Neptune and Pluto, present only when modernPlanets true was sent. Deliberately separate from meta and deliberately without dignity, avastha, combustion or aspect fields: those are constructs of the nine-graha system and the modern planets rule no sign, so no classical value exists for them. Order is always Uranus, Neptune, Pluto. */ modernPlanets?: Array<{ /** * Modern planet name. These three are outside the classical Navagraha and are returned only when modernPlanets true is sent. */ planet: 'Uranus' | 'Neptune' | 'Pluto'; /** * Sanskrit name Indian software prints for this body: Arun for Uranus, Varun for Neptune, Yam for Pluto. Transliterated rather than translated, the same treatment as rashi and nakshatra lord names, so it is identical in every locale. */ sanskritName: 'Arun' | 'Varun' | 'Yam'; /** * Sidereal longitude in degrees (0-360), in the same ayanamsa frame as every other position in this response. */ longitude: number; /** * Zodiac sign (rashi) the body occupies. */ rashi: string; /** * Degrees advanced into the sign, 0 to 30. This is the figure a chart displays beside the sign. */ degreeInRashi: number; /** * Nakshatra placement. Reported because it is purely positional; it does not imply the body participates in Vimshottari dasha, which is built on the Moon alone. */ nakshatra: { /** * Nakshatra (lunar mansion, 1 of 27) the body occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). */ pada: number; /** * Nakshatra index (1-27) starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True when the body appears to move backward. All three are retrograde for roughly 40 percent of each year, so this is the normal case rather than the exception. */ isRetrograde: boolean; }>; /** * The twelve bhavas (houses) in order, each with its classical name and significations. Houses are counted whole-sign from the Lagna. */ houses: Array<{ /** * Bhava (house) number 1-12. House 1 is the Lagna (Ascendant), house 7 the partnership axis, house 10 the career axis. */ number: number; /** * Classical name of the bhava (house). Present when an interpretation entry exists for this house. */ name?: string; /** * Significations of the bhava (house). Present when an interpretation entry exists for this house. */ description?: string; /** * Significations of the bhava as short keywords, the compact form of description. Bhava 1 covers self, body and vitality; 2 wealth and speech; 7 marriage and partnership; 10 career and status. Suited to chart labels, table cells and legends where the full classical description is too long, and identical to the houseThemes map returned by the Vimshottari dasha and KP chart routes. Localized by the lang query parameter. */ themes?: Array; }>; /** * Combust planets (astangata graha): grahas within their combustion orb of the Sun. Combustion weakens a planet significations. Empty when no planet is combust. */ combustion: Array<{ /** * Graha that is combust (too close to the Sun, astangata). */ planet: string; /** * Angular separation from the Sun in degrees. */ distanceFromSun: number; /** * Combustion orb in degrees applied for this graha. A planet within this orb of the Sun is treated as combust, weakening its results. */ orb: number; }>; /** * Planetary wars (graha yuddha): pairs of visible planets within 1 degree of each other. Empty when no two planets are in war. */ planetaryWar: Array<{ /** * First graha in the planetary war (graha yuddha) pair. */ planet1: string; /** * Second graha in the planetary war (graha yuddha) pair. */ planet2: string; /** * Angular separation between the two grahas in degrees. */ distance: number; /** * Graha that wins the planetary war, the one with the more northerly ecliptic latitude. The winner keeps its strength, the loser is weakened. */ winner: string; }>; /** * Planet-in-rashi and planet-in-nakshatra interpretation summaries, keyed by planet name. Translated when a supported lang is requested. */ interpretations: { [key: string]: { /** * Interpretation of the planet placement in its rashi (sign). */ rashi: string; /** * Interpretation of the planet placement in its nakshatra. */ nakshatra: string; }; }; /** * Forty-four classical yogas detected against this chart. Twelve conjunction and dignity yogas: Gajakesari (three-rule parashara definition), Sunapha, Anapha, Dhurdhura, Kemadruma, Chandra Mangala, Budha-Aditya, and the five Pancha Mahapurusha (Ruchaka, Bhadra, Hamsa, Malavya, Sasa). Plus all 32 Nabhasa distribution yogas across the Asraya, Dala, Akriti and Sankhya families, which read how the seven visible grahas are spread over the whole chart rather than any single conjunction, and which apply the four classical precedence norms so an outranked yoga is returned as absent with evidence naming the norm that silenced it. Each entry carries an `id` (matches `GET /yoga/{id}` for full glossary lookup), a `present` boolean, a `quality` (Positive, Negative, or Both = auspicious, inauspicious, or context-dependent), and classical-text `evidence` for the rule that triggered or failed. Filter on `present === true` for the active list. */ yogas?: Array<{ /** * Glossary id (lowercase, kebab-case) matching an entry in the 301-entry planetary-yoga catalog. Use with GET /yoga/{id} to retrieve the full glossary text. */ id: string; /** * Classical Sanskrit name of the yoga as referenced in BPHS (Brihat Parashara Hora Shastra), Phaladeepika, and B.V. Raman *Three Hundred Important Combinations*. */ name: string; /** * Brief classical formation rule. Identifies the planetary placement, lordship, dignity, aspect pattern, sign modality, or whole-chart bhava distribution required for the yoga to form. */ description: string; /** * Classical phala (life-effect) description of the yoga when present, sourced from the parashari and phaladeepika tradition. */ result: string; /** * Overall nature. Auspicious yogas (Pancha Mahapurusha, Gajakesari) bestow benefits; inauspicious yogas (Kemadruma) indicate challenges; Both denotes context-dependent effects. */ quality: 'Positive' | 'Negative' | 'Both'; /** * Classical grouping, ALWAYS present on a detection verdict: one of the four Nabhasa families (asraya, dala, akriti, sankhya) or classical for the twelve single-combination yogas such as Gajakesari and the Pancha Mahapurusha. Group the verdict list on this key to render a Nabhasa result the way the tradition arranges it. Never translated, so grouping works identically under any lang. */ family: 'classical' | 'asraya' | 'dala' | 'akriti' | 'sankhya'; /** * True if every classical condition for the yoga is satisfied by the given chart. False means one of TWO different things: the rule failed, or the rule held and a stronger family outranked it. Read `suppressedBy` to tell those apart, which is exact and locale-independent; `evidence` says the same thing in English prose. */ present: boolean; /** * Set ONLY when this yoga matched its own classical rule and was then silenced by a higher-ranking family, so `present` is false for a reason a practitioner reads very differently from a failed rule. Names the family that took precedence, under the four classical norms: Akriti outranks Asraya, and Akriti, Asraya and Dala each outrank Sankhya. Absent means the rule genuinely did not hold. */ suppressedBy?: 'classical' | 'asraya' | 'dala' | 'akriti' | 'sankhya'; /** * Human-readable rationale naming the specific rule that triggered or failed the detection, including planetary positions, dignity, kendradhipati status, lordship, malefic drishti, sign modality, or whole-chart bhava distribution. For a Nabhasa yoga that matched its own rule but was outranked, this names the precedence norm that silenced it, for example that an Akriti yoga outranks Asraya or that any other Nabhasa family suppresses Sankhya. */ evidence?: string; }>; /** * Quick lookup of all planet positions keyed by planet name. Contains Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu, and Lagna (Ascendant). */ meta: { [key: string]: { /** * Planet (graha) name. One of 9 Navagraha (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu) or Lagna (Ascendant). Used for matching transits and dasha lords to natal positions. */ graha: string; /** * Zodiac sign (rashi) the planet occupies in the birth chart. One of 12 Vedic rashis from Aries (Mesha) to Pisces (Meena). */ rashi: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. Precise position used for aspect calculations, divisional chart mapping, and transit analysis. */ longitude: number; /** * Nakshatra (lunar mansion) data for this planet. Nakshatras are the 27-fold division of the zodiac central to Vedic timing and compatibility systems. */ nakshatra: { /** * Nakshatra (lunar mansion) the planet occupies. One of 27 Vedic nakshatras spanning 13 degrees 20 minutes each. Determines dasha lord and behavioral qualities. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra divides into 4 padas of 3 degrees 20 minutes. Pada determines Navamsa sign and refines personality traits. */ pada: number; /** * Nakshatra sequence number (1-27) in zodiac order starting from Ashwini. Used for Tara Bala compatibility and dasha calculations. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Drives the dasha sequence and the nakshatra qualities. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if the planet is in retrograde motion (appears to move backward through the zodiac). Retrograde planets carry intensified or internalized significations in Vedic interpretation. */ isRetrograde: boolean; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi; Lagna itself is house 1). Present on the D1 birth chart; divisional charts omit it. */ house?: number; /** * Localized readings for this graha avastha states, present only when avasthaInfo true was sent. Each key mirrors the state field of the same name and carries a short meaning plus a one-sentence classical interpretation, so a client can label Yuva or Swapna without a second lookup call. */ avasthaInfo?: { awastha?: { /** * One or two word gloss of the state, suitable for a table cell beside the graha. */ meaning: string; /** * Single-sentence classical reading of what the state does to the graha results, sourced from BPHS ch. 45, Saravali ch. 5 and Phaladeepika ch. 9. Localized by the lang query parameter. */ interpretation: string; }; jagradadi?: { /** * One or two word gloss of the state, suitable for a table cell beside the graha. */ meaning: string; /** * Single-sentence classical reading of what the state does to the graha results, sourced from BPHS ch. 45, Saravali ch. 5 and Phaladeepika ch. 9. Localized by the lang query parameter. */ interpretation: string; }; deeptadi?: { /** * One or two word gloss of the state, suitable for a table cell beside the graha. */ meaning: string; /** * Single-sentence classical reading of what the state does to the graha results, sourced from BPHS ch. 45, Saravali ch. 5 and Phaladeepika ch. 9. Localized by the lang query parameter. */ interpretation: string; }; }; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. D1 birth chart only. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; /** * Jagradadi avastha, the waking state of the graha set by its sign dignity: Jagrat (awake, own sign or exaltation, full results), Swapna (dreaming, a friendly or neutral sign, medium results), Sushupti (sleeping, an enemy sign or debilitation, no results). Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna own no sign and are omitted. */ jagradadi?: 'Jagrat' | 'Swapna' | 'Sushupti'; /** * Deeptadi avastha, the dispositional state of the graha, one of nine: Dipta (exalted, blazing), Svastha (own sign, healthy), Pramudita (great friend sign, delighted), Shanta (friendly sign, at peace), Dina (neutral sign, helpless), Duhkhita (enemy sign, sorrowful), Khala (great enemy sign, harsh), Vikala (joined by a natural malefic, disabled), Kopa (eclipsed by the Sun, enraged). Where more than one applies the more severe is returned, so combustion outranks a malefic conjunction, which outranks the sign reading. Present for the seven classical grahas on the D1 chart; Rahu, Ketu and the Lagna are omitted. */ deeptadi?: 'Dipta' | 'Svastha' | 'Pramudita' | 'Shanta' | 'Dina' | 'Duhkhita' | 'Vikala' | 'Khala' | 'Kopa'; }; }; }; export type BirthChartRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; /** * Set true to include a localized meaning and one-sentence classical interpretation beside each graha avastha state, under avasthaInfo on that graha in meta. Defaults to false, so an existing integration is byte-identical until it opts in. Saves a second call to GET /avasthas and the client-side join that would otherwise be needed to turn Yuva or Swapna into readable text. */ avasthaInfo?: boolean; /** * Set true to also return Uranus, Neptune and Pluto, under the Sanskrit names Arun, Varun and Yam that Indian software prints for them. They arrive in a separate modernPlanets array, NOT inside meta, because classical Jyotish is defined over nine grahas: the moderns rule no sign, so they have no dignity, avastha, combustion or aspect strength and it would be fabrication to report one. Each carries longitude, rashi, degree in sign, nakshatra with pada and lord, and retrograde status. Defaults to false, so an existing integration is byte-identical until it opts in. */ modernPlanets?: boolean; }; export type NavamsaResponse = { /** * Navamsa (D9) divisional chart showing planetary positions across 12 rashi houses plus a meta lookup. Same structure as the birth chart response. */ chart: { /** * Planet positions in the Navamsa (D9) chart keyed by planet name. Contains all 9 Navagraha plus Lagna. */ meta: { [key: string]: { /** * Planet (graha) name. One of 9 Navagraha (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu) or Lagna (Ascendant). In Navamsa, Venus and Jupiter placements are especially significant for marriage and spiritual growth. */ graha: string; /** * Zodiac sign (rashi) the planet occupies in the Navamsa (D9) chart. D9 sign placement reveals the deeper quality of a planet and is critical for spouse characteristics and marriage timing. */ rashi: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. Same as D1 birth chart longitude, preserved for cross-chart reference and aspect analysis. */ longitude: number; /** * Nakshatra (lunar mansion) data for this planet. Nakshatras are the 27-fold division of the zodiac central to Vedic timing and compatibility systems. */ nakshatra: { /** * Nakshatra (lunar mansion) the planet occupies. One of 27 Vedic nakshatras spanning 13 degrees 20 minutes each. Determines dasha lord and behavioral qualities. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra divides into 4 padas of 3 degrees 20 minutes. Pada determines Navamsa sign and refines personality traits. */ pada: number; /** * Nakshatra sequence number (1-27) in zodiac order starting from Ashwini. Used for Tara Bala compatibility and dasha calculations. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Carried over from the D1 nakshatra. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if the planet is in retrograde motion (appears to move backward through the zodiac). Retrograde planets carry intensified or internalized significations in Vedic interpretation. */ isRetrograde: boolean; /** * Bhava (house) number 1-12 in the Navamsa chart, counted whole-sign from the D9 Lagna. This is the Navamsa-specific house and differs from the D1 birth-chart house. */ house?: number; }; }; /** * One of the 12 navamsa rashi-house buckets (aries shown; taurus through pisces follow the identical shape). Each lists the planets placed in that sign. */ aries: { /** * Zodiac sign name in lowercase. Always equals the key of the navamsa rashi-house block it sits in. */ rashi: string; /** * Planets placed in this navamsa sign. */ signs: Array<{ /** * Planet (graha) placed in this navamsa sign. */ graha: string; /** * Original sidereal longitude in degrees (0-360), same as the D1 birth chart. Preserved for cross-chart reference. */ longitude: number; /** * Nakshatra (lunar mansion) data for this planet, carried over from the D1 chart. */ nakshatra: { /** * Nakshatra (lunar mansion) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). */ pada: number; /** * Nakshatra index in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if the planet is in retrograde motion. */ isRetrograde: boolean; /** * Bhava (house) number 1-12 in the Navamsa chart, counted whole-sign from the D9 Lagna. */ house?: number; }>; }; [key: string]: unknown; }; /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Planets that are Vargottama (same sign in D1 and D9) */ vargottama: Array; /** * Explanation of Vargottama significance */ vargottamaExplanation: string; }; export type NavamsaRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; export type DivisionalChartResponse = { /** * Metadata about the selected divisional chart. */ division: { /** * Division number (e.g. 10 for D10 Dasamsa). */ number: number; /** * English name of the divisional chart. */ name: string; /** * Sanskrit name of the divisional chart. */ sanskritName: string; /** * Size of each division segment within a 30-degree sign. */ degreesPerDivision: string; /** * Life areas this divisional chart reveals. */ significance: string; }; /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Divisional chart showing planetary positions across 12 rashi houses plus a meta lookup. Same structure as birth chart and navamsa responses. */ chart: { /** * Planet positions in the divisional chart keyed by planet name. Contains all 9 Navagraha plus Lagna. */ meta: { [key: string]: { /** * Planet (graha) name. One of 9 Navagraha (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu) or Lagna (Ascendant). Used to match transits and dasha lords to divisional chart placements. */ graha: string; /** * Zodiac sign (rashi) the planet occupies in this divisional chart. May differ from the D1 birth chart sign. Comparing D1 and divisional rashi reveals Vargottama status and domain-specific strengths. */ rashi: string; /** * Original sidereal longitude in degrees (0-360) using Lahiri ayanamsa, same as D1 birth chart. Sign placement changes per division but longitude is preserved for cross-chart reference. */ longitude: number; /** * Nakshatra (lunar mansion) data for this planet. Nakshatras are the 27-fold division of the zodiac central to Vedic timing and compatibility systems. */ nakshatra: { /** * Nakshatra (lunar mansion) the planet occupies. One of 27 Vedic nakshatras spanning 13 degrees 20 minutes each. Determines dasha lord and behavioral qualities. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra divides into 4 padas of 3 degrees 20 minutes. Pada determines Navamsa sign and refines personality traits. */ pada: number; /** * Nakshatra sequence number (1-27) in zodiac order starting from Ashwini. Used for Tara Bala compatibility and dasha calculations. */ key: number; /** * Vimshottari ruling planet of this nakshatra. One of the nine grahas (Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury). Carried over from the D1 nakshatra. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if the planet is in retrograde motion (appears to move backward through the zodiac). Retrograde planets carry intensified or internalized significations in Vedic interpretation. */ isRetrograde: boolean; /** * Bhava (house) number 1-12 in this divisional chart, counted whole-sign from the divisional Lagna. Specific to this varga and differs from the D1 birth-chart house. */ house?: number; }; }; /** * One of the 12 divisional rashi-house buckets (aries shown; taurus through pisces follow the identical shape). Each lists the planets placed in that sign. */ aries: { /** * Zodiac sign name in lowercase. Always equals the key of the divisional rashi-house block it sits in. */ rashi: string; /** * Planets placed in this divisional sign. */ signs: Array<{ /** * Planet (graha) placed in this divisional sign. */ graha: string; /** * Original sidereal longitude in degrees (0-360), same as the D1 birth chart. Preserved for cross-chart reference. */ longitude: number; /** * Nakshatra (lunar mansion) data for this planet, carried over from the D1 chart. */ nakshatra: { /** * Nakshatra (lunar mansion) the planet occupies. */ name: string; /** * Nakshatra pada (quarter, 1-4). */ pada: number; /** * Nakshatra index in the zodiac sequence starting from Ashwini. */ key: number; /** * Vimshottari ruling planet of this nakshatra. */ lord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * True if the planet is in retrograde motion. */ isRetrograde: boolean; /** * Bhava (house) number 1-12 in this divisional chart, counted whole-sign from the divisional Lagna. */ house?: number; }>; }; [key: string]: unknown; }; /** * Planets that are Vargottama (same sign in D1 and this divisional chart). Vargottama planets deliver strong, consistent results. */ vargottama: Array; }; export type DivisionalChartRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; /** * Divisional chart number. Each division reveals a specific life area. Supported: 2 (Hora, wealth), 3 (Drekkana, siblings), 4 (Chaturthamsa, property), 7 (Saptamsa, children), 9 (Navamsa, marriage), 10 (Dasamsa, career), 12 (Dwadasamsa, parents), 16 (Shodasamsa, vehicles), 20 (Vimsamsa, spirituality), 24 (Chaturvimsamsa, education), 27 (Bhamsa, strength), 30 (Trimsamsa, misfortunes), 40 (Khavedamsa, merit), 45 (Akshavedamsa, character), 60 (Shashtiamsa, past life karma). */ division: number; }; export type CompatibilityResponse = { /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Total Ashtakoot Gun Milan score out of 36. Scores above 18 are considered compatible for marriage. Higher scores indicate stronger marital harmony. */ total: number; /** * Maximum possible Guna Milan score (always 36). The 36 points are distributed across 8 kootas (matching categories). */ maxScore: number; /** * Compatibility percentage derived from total/maxScore. Above 50% (18/36) is the traditional minimum threshold for marriage compatibility. */ percentage: number; /** * True when percentage >= 50% (18/36 minimum). Based on the traditional Ashtakoot Gun Milan threshold used by Vedic astrologers for kundli matching. */ isCompatible: boolean; /** * Human-readable marriage recommendation based on overall score and dosha analysis. Indicates whether the union is recommended, and if not, specifies the reason (e.g. Nadi Dosha, Bhakoot Dosha, low overall score). */ recommendation: string; /** * List of active (uncancelled) doshas in the matching. Doshas that meet classical cancellation conditions from Muhurta Martanda or BPHS are excluded from this array and appear in doshaCancellations instead. Common doshas: Nadi Dosha (same Nadi type, 0/8 points), Bhakoot Dosha (inauspicious Moon sign distance, 0/7 points). Empty array when no doshas are present or all detected doshas are cancelled. */ doshas: Array; /** * Doshas detected but cancelled by classical exception rules. Nadi Dosha cancels when partners share the same Moon sign with different nakshatras, same nakshatra with different padas, or same nakshatra spanning different signs. Bhakoot Dosha cancels when Moon sign lords are the same planet or mutual natural friends. Koota score remains 0 but the dosha is not counted against the recommendation. */ doshaCancellations: Array<{ /** * Name of the cancelled dosha (Nadi Dosha or Bhakoot Dosha). */ dosha: string; /** * Classical cancellation condition that neutralizes this dosha. Based on Muhurta Martanda for Nadi Dosha and BPHS for Bhakoot Dosha. */ reason: string; }>; /** * Detailed breakdown of compatibility scores across all 8 Ashtakoot kootas. Each category evaluates a different aspect of marital compatibility: temperament, physical, mental, financial, and health. */ breakdown: Array<{ /** * One of 8 Ashtakoot matching categories: Varna, Vashya, Tara, Yoni, Graha Maitri, Gana, Bhakoot, Nadi. */ category: string; /** * Points scored in this category. Maximum varies: Varna (1), Vashya (2), Tara (3), Yoni (4), Graha Maitri (5), Gana (6), Bhakoot (7), Nadi (8). */ score: number; /** * Maximum possible points for this koota category. */ maxScore: number; /** * Classification of person 1 for this koota (e.g. Vaishya for Varna, Chatushpada for Vashya, Sheep for Yoni). */ person1: string; /** * Classification of person 2 for this koota. */ person2: string; /** * Human-readable explanation of what this koota category evaluates. */ description: string; }>; }; export type CompatibilityRequest = { /** * Birth data of the first person (typically the boy/groom in traditional Ashtakoot matching). Date, time, and location determine Moon nakshatra for koota scoring. */ person1: { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; }; /** * Birth data of the second person (typically the girl/bride in traditional Ashtakoot matching). Moon nakshatra compared against person 1 across all 8 kootas. */ person2: { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; }; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; export type PlanetaryPositionsResponse = { [key: string]: { /** * Vedic planet (graha) name. One of the Navagraha: Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu, or Lagna (Ascendant). */ graha: string; /** * Zodiac sign (rashi) the planet occupies. One of 12 Vedic rashis from Aries to Pisces. */ rashi: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. Precise planetary position for chart calculations. */ longitude: number; /** * Ecliptic latitude in degrees, the angular distance north (positive) or south (negative) of the ecliptic. Used in planetary war (graha yuddha) winner resolution and latitude-sensitive analysis. Omitted for the Lagna (Ascendant). */ latitude?: number; /** * House number (1-12) the planet occupies using Whole Sign house system. House 1 is the Lagna (Ascendant) sign. Essential for bhava analysis and house-level predictions. */ house: number; /** * Nakshatra (lunar mansion) data with optional interpretive details from Vedic tradition. */ nakshatra: { /** * Nakshatra (lunar mansion) the planet occupies. One of 27 Vedic nakshatras spanning 13 degrees 20 minutes each. */ name: string; /** * Nakshatra pada (quarter, 1-4). Each nakshatra divides into 4 padas of 3 degrees 20 minutes. Determines Navamsa sign. */ pada: number; /** * Nakshatra sequence number (1-27) in zodiac order starting from Ashwini. Used for Tara Bala and dasha calculations. */ key: number; /** * Presiding deity of the nakshatra from Vedic mythology. Influences the spiritual quality and karmic themes of the planet placement. */ deity?: string; /** * Traditional symbol representing the nakshatra. Reflects core energy and life themes associated with this lunar mansion. */ symbol?: string; /** * Personality traits and behavioral tendencies when a planet occupies this nakshatra. Used for character analysis and prediction. */ characteristics?: string; }; /** * Vedic zodiac sign (rashi) details including Sanskrit name, symbol, elemental energy, and personality characteristics. Present when interpretation data is available. */ rashiDetails?: { /** * Sanskrit name of the zodiac sign as used in traditional Jyotish texts. */ vedicName?: string; /** * Traditional symbol representing this zodiac sign. */ symbol?: string; /** * Elemental and gender classification of the rashi (Masculine/Feminine, Fire/Earth/Air/Water). */ energy?: string; /** * Key personality traits and behavioral tendencies of this zodiac sign in Vedic astrology. */ characteristics?: string; }; /** * Whether the planet is in retrograde motion (vakri). Rahu and Ketu are always retrograde in Vedic astrology. */ isRetrograde: boolean; /** * Whether the planet is combust (asta, moudhya). A planet is combust when too close to the Sun, weakening its significations. Limits per Surya Siddhanta: Moon 12 deg, Mars 17 deg, Mercury 14 deg (12 deg if retrograde), Jupiter 11 deg, Venus 10 deg (8 deg if retrograde), Saturn 15 deg. Compared against the difference in ecliptic longitude, which is the standard interpretive convention and matches what other Vedic software reports. It is a chart judgement and not a statement about naked-eye visibility, which additionally depends on the observer latitude: for that use the heliacal endpoint, which applies the same limits in the classical degrees of time. The field is omitted entirely for Sun, Rahu, Ketu and Lagna, since the question does not apply to them rather than the answer being no. */ isCombust?: boolean; /** * Angular distance from the Sun in degrees (0-180). Smaller values indicate closer proximity. Null for Sun, Rahu, Ketu, and Lagna. Useful for gauging combustion severity and planetary strength analysis. */ combustionDistance?: number; /** * Baladi avastha, the planetary age-state set by the graha degree within its sign: Bala (infant), Kumara (child), Yuva (adult, strongest results), Vriddha (old), Mrita (dead, weakest). Bands run forward in odd signs and reversed in even signs. */ awastha?: 'Bala' | 'Kumara' | 'Yuva' | 'Vriddha' | 'Mrita'; }; }; export type PlanetaryPositionsRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; export type ManglikResponse = { /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Whether Manglik dosha (Kuja dosha) is present based on Mars placement from Lagna */ present: boolean; /** * Manglik dosha intensity, Mild (houses 2, 12), Moderate (houses 4, 7), Severe (houses 1, 8) */ severity?: 'Mild' | 'Moderate' | 'Severe'; /** * Human-readable Manglik dosha analysis with Mars house placement */ description: string; /** * Classical cancellation factors that reduce Manglik dosha severity (own sign, exaltation, benefic aspects) */ exceptions?: Array; /** * Traditional Vedic remedies for Manglik dosha mitigation based on severity level */ remedies?: Array; /** * Manglik dosha effects on marriage, personality, and relationships */ effects?: { /** * Impact of Manglik dosha on marriage and marital harmony */ marriage: string; /** * Influence on temperament and behavioral traits */ personality: string; /** * Age-related intensity and Mars maturity effects */ timing: string; /** * Impact on interpersonal and spousal relationships */ relationships: string; }; }; export type ManglikRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; export type KalsarpaResponse = { /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Whether Kalsarpa dosha (Kalsarpa yoga) is present, all planets hemmed between Rahu-Ketu axis */ present: boolean; /** * Kalsarpa dosha intensity based on Rahu-Ketu house positions */ severity?: 'Mild' | 'Moderate' | 'Severe'; /** * One of 12 Kalsarpa types based on Rahu house position (Ananta, Kulik, Vasuki, Shankhapala, Padma, Mahapadma, Takshak, Karkotak, Shankhachud, Ghatak, Vishdhar, Sheshnag) */ type?: string; /** * Human-readable Kalsarpa dosha analysis with Rahu-Ketu axis details */ description: string; /** * Traditional Vedic remedies for Kalsarpa dosha including puja, mantras, and spiritual practices */ remedies?: Array; /** * Kalsarpa dosha effects on career, health, mindset, and relationships */ effects?: { /** * When Kalsarpa effects are most active in Vimshottari dasha */ duration: string; /** * Impact on professional growth and career progress */ career: string; /** * Physical and mental health implications */ health: string; /** * Impact on family bonds and personal relationships */ relationships: string; /** * Psychological and emotional effects */ mindset: string; /** * Potential spiritual and personal growth benefits */ positive: string; }; }; export type KalsarpaRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; export type SadhesatiResponse = { /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Whether Sade Sati is currently active, Saturn transiting 12th, 1st, or 2nd house from natal Moon */ present: boolean; /** * Sadhesati intensity: Moderate for Rising/Setting phases, Severe for Peak phase (Saturn over natal Moon) */ severity?: 'Mild' | 'Moderate' | 'Severe'; /** * Current Sadhesati phase: Rising (12th house), Peak (1st house), or Setting (2nd house) */ type?: string; /** * Human-readable Sadhesati analysis with current Saturn transit phase relative to natal Moon */ description: string; /** * Traditional Vedic remedies for Shani Sade Sati including Shani mantras, donations, and worship */ remedies?: Array; /** * Sadhesati effects by transit phase with general and phase-specific impacts */ effects?: { /** * Overall impact of Saturn transit during Sade Sati period */ general: string; /** * Phase-specific effects for the current Sadhesati stage (Rising/Peak/Setting) */ phases: { [key: string]: string; }; }; }; export type SadhesatiRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; export type YogaDetail = { /** * Glossary id (lowercase, kebab-case) matching an entry in the 301-entry planetary-yoga catalog. Use with GET /yoga/{id} to retrieve the full glossary text. */ id: string; /** * Classical Sanskrit name of the yoga as referenced in BPHS (Brihat Parashara Hora Shastra), Phaladeepika, and B.V. Raman *Three Hundred Important Combinations*. */ name: string; /** * Brief classical formation rule. Identifies the planetary placement, lordship, dignity, aspect pattern, sign modality, or whole-chart bhava distribution required for the yoga to form. */ description: string; /** * Classical phala (life-effect) description of the yoga when present, sourced from the parashari and phaladeepika tradition. */ result: string; /** * Overall nature. Auspicious yogas (Pancha Mahapurusha, Gajakesari) bestow benefits; inauspicious yogas (Kemadruma) indicate challenges; Both denotes context-dependent effects. */ quality: 'Positive' | 'Negative' | 'Both'; /** * Nabhasa family this yoga belongs to, present only on the 32 Nabhasa distribution yogas: asraya (3, sign modality), dala (2, benefic or malefic kendra tenancy), akriti (20, bhava shape) and sankhya (7, count of occupied rasis). Absent on every other glossary row, which is most of the catalog, since those are single-combination yogas outside the Nabhasa scheme. Group or filter the catalog on this key; it is never translated. */ family?: 'classical' | 'asraya' | 'dala' | 'akriti' | 'sankhya'; }; export type YogaDetectResponse = { /** * Array of 48 detected yogas, always the full set so a caller can render absent verdicts too. Every entry carries a `present` boolean and a `quality` (Positive, Negative, or Both = auspicious, inauspicious, or context-dependent); filter on present === true for active yogas. Evidence text names the rule that triggered or failed, or the precedence norm that outranked it. */ yogas: Array<{ /** * Glossary id (lowercase, kebab-case) matching an entry in the 301-entry planetary-yoga catalog. Use with GET /yoga/{id} to retrieve the full glossary text. */ id: string; /** * Classical Sanskrit name of the yoga as referenced in BPHS (Brihat Parashara Hora Shastra), Phaladeepika, and B.V. Raman *Three Hundred Important Combinations*. */ name: string; /** * Brief classical formation rule. Identifies the planetary placement, lordship, dignity, aspect pattern, sign modality, or whole-chart bhava distribution required for the yoga to form. */ description: string; /** * Classical phala (life-effect) description of the yoga when present, sourced from the parashari and phaladeepika tradition. */ result: string; /** * Overall nature. Auspicious yogas (Pancha Mahapurusha, Gajakesari) bestow benefits; inauspicious yogas (Kemadruma) indicate challenges; Both denotes context-dependent effects. */ quality: 'Positive' | 'Negative' | 'Both'; /** * Classical grouping, ALWAYS present on a detection verdict: one of the four Nabhasa families (asraya, dala, akriti, sankhya) or classical for the twelve single-combination yogas such as Gajakesari and the Pancha Mahapurusha. Group the verdict list on this key to render a Nabhasa result the way the tradition arranges it. Never translated, so grouping works identically under any lang. */ family: 'classical' | 'asraya' | 'dala' | 'akriti' | 'sankhya'; /** * True if every classical condition for the yoga is satisfied by the given chart. False means one of TWO different things: the rule failed, or the rule held and a stronger family outranked it. Read `suppressedBy` to tell those apart, which is exact and locale-independent; `evidence` says the same thing in English prose. */ present: boolean; /** * Set ONLY when this yoga matched its own classical rule and was then silenced by a higher-ranking family, so `present` is false for a reason a practitioner reads very differently from a failed rule. Names the family that took precedence, under the four classical norms: Akriti outranks Asraya, and Akriti, Asraya and Dala each outrank Sankhya. Absent means the rule genuinely did not hold. */ suppressedBy?: 'classical' | 'asraya' | 'dala' | 'akriti' | 'sankhya'; /** * Human-readable rationale naming the specific rule that triggered or failed the detection, including planetary positions, dignity, kendradhipati status, lordship, malefic drishti, sign modality, or whole-chart bhava distribution. For a Nabhasa yoga that matched its own rule but was outranked, this names the precedence norm that silenced it, for example that an Akriti yoga outranks Asraya or that any other Nabhasa family suppresses Sankhya. */ evidence?: string; }>; /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Count of yogas where present === true in this chart. Range 0-48, though real charts sit in the low single digits: the Nabhasa families are mutually constrained by the precedence norms, and most shape yogas are rare. */ total: number; /** * Echo of the resolved birth data used for detection. Timezone is the numeric offset that the chart engine consumed (IANA names are resolved upstream). */ birthDetails: { /** * Birth date the kundli was cast for, YYYY-MM-DD, echoed back from the request. */ date: string; /** * Birth time the kundli was cast for, 24-hour HH:MM:SS, echoed back from the request. Lagna moves roughly one rashi every two hours, so this is what pins the bhava-dependent yogas. */ time: string; /** * Birth latitude in decimal degrees, echoed back from the request. Feeds the local sidereal time behind the Lagna. */ latitude: number; /** * Birth longitude in decimal degrees, echoed back from the request. East is positive, west is negative. */ longitude: number; /** * Numeric UTC offset in decimal hours that the chart engine actually consumed. An IANA name sent on the request is resolved to its DST-correct offset upstream, so this is always a number. */ timezone: number; }; }; export type YogaDetectRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; export type KpAyanamsaResponse = { /** * Date for which ayanamsa was calculated */ date: string; /** * The exact UTC instant the value was computed for, after applying the time and timezone. Echoed so a client reconciling to the arcsecond can confirm the moment rather than infer it from the date alone. Equals midnight UTC of the date when no time was supplied. */ instant: string; /** * KP-Newcomb ayanamsa value in degrees */ ayanamsa: number; /** * Ayanamsa type identifier */ type: string; /** * Mathematical basis for ayanamsa calculation */ formula: string; /** * UTC timestamp when calculation was performed */ calculated: string; }; export type KpPlanetsResponse = { /** * Applied ayanamsa value in degrees */ ayanamsa: number; planets: Array<{ /** * Vedic graha name (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu). */ planet: string; /** * KP sidereal longitude in degrees (0-360). Used to determine Placidus house placement and KP subdivision (sign, star, sub). */ longitude: number; /** * Zodiac sign (rashi) this planet occupies in the sidereal zodiac. */ sign: string; /** * Rashi lord (sign ruler). First level of the KP significator hierarchy. Its house ownership determines L4 significations. */ signLord: string; /** * Nakshatra (lunar mansion) this planet occupies. One of 27 nakshatras, each spanning 13 degrees 20 minutes. */ nakshatra: string; /** * Nakshatra sequence number (1-27). Ashwini=1 through Revati=27. */ nakshatraNumber: number; /** * Nakshatra lord (star ruler) from the Vimshottari dasha sequence. Determines the nature of results this planet delivers in KP. */ nakshatraLord: string; /** * Nakshatra pada/quarter (1-4) */ pada: number; /** * Star-lord (same as nakshatra lord in KP system) */ starLord: string; /** * Sub-lord based on 249-level KP subdivision */ subLord: string; /** * Sub-sub lord (SSL) based on 2241-level KP subdivision. Third level of Vimshottari dasha proportions. */ subSubLord: string; /** * KP horary number (1-249) */ kpNumber: number; /** * Whether planet is in retrograde motion */ retrograde: boolean; }>; }; export type KpPlanetsRequest = { /** * Birth date in YYYY-MM-DD format */ date: string; /** * Birth time in 24-hour HH:MM:SS format */ time: string; /** * Birth location latitude in decimal degrees */ latitude: number; /** * Birth location longitude in decimal degrees */ longitude: number; /** * Timezone offset from UTC in hours. Defaults to 5.5 (IST) for Vedic astrology. */ timezone?: number | string; /** * Ayanamsa system for sidereal conversion. "kp-newcomb" uses the KP-Newcomb dynamic formula (most common for KP). "kp-old" uses the Krishnamurti original table. "lahiri" uses Lahiri/Chitrapaksha ayanamsa matching most traditional Vedic software. "raman" uses the B.V. Raman ayanamsa, about 1.45 degrees below Lahiri. "custom" allows providing your own value via ayanamsaValue. Defaults to "kp-newcomb". */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the Rahu and Ketu positions. Mean is the traditional Vedic default and what printed panchangs use; the choice can move a KP sub-lord in narrow boundary cases, where a span can be as small as 0.5 degrees. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; export type KpCuspsResponse = { /** * Applied ayanamsa value in degrees */ ayanamsa: number; /** * House system used for calculations */ houseSystem: string; cusps: Array<{ /** * House number (1-12) */ house: number; /** * Cusp longitude in degrees (0-360) */ longitude: number; /** * Zodiac sign of the cusp */ sign: string; /** * Rashi lord (sign ruler) of this cusp. In KP, the cusp sign lord is a significator for this house. */ signLord: string; /** * Nakshatra (lunar mansion) at this cusp degree. The cusp nakshatra lord and sublord together determine the houses complete significator chain. */ nakshatra: string; /** * Nakshatra lord (star ruler) of the cusp. One of 9 Vimshottari dasha lords. Determines which planet activates this cusp in KP predictions. */ nakshatraLord: string; /** * Nakshatra pada/quarter (1-4) */ pada: number; /** * Star-lord (nakshatra lord) */ starLord: string; /** * Sub-lord based on KP 249-level subdivision */ subLord: string; /** * Sub-sub lord (SSL) based on 2241-level KP subdivision. Third level of Vimshottari dasha proportions. */ subSubLord: string; /** * KP horary number (1-249) */ kpNumber: number; }>; /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus: 'general' | 'finance'; }; export type KpCuspsRequest = { /** * Birth date in YYYY-MM-DD format */ date: string; /** * Birth time in 24-hour HH:MM:SS format */ time: string; /** * Birth location latitude in decimal degrees */ latitude: number; /** * Birth location longitude in decimal degrees */ longitude: number; /** * Timezone offset from UTC in hours. Defaults to 5.5 (IST) for Vedic astrology. */ timezone?: number | string; /** * Ayanamsa system for sidereal conversion. "kp-newcomb" uses the KP-Newcomb dynamic formula (most common for KP). "kp-old" uses the Krishnamurti original table. "lahiri" uses Lahiri/Chitrapaksha ayanamsa matching most traditional Vedic software. "raman" uses the B.V. Raman ayanamsa, about 1.45 degrees below Lahiri. "custom" allows providing your own value via ayanamsaValue. Defaults to "kp-newcomb". */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; export type KpChartResponse = { /** * Chart metadata including birth data, ayanamsa, and house system. */ meta: { /** * Birth date in YYYY-MM-DD format used for this KP chart calculation. */ date: string; /** * Birth time in HH:MM:SS format used for Lagna and Placidus cusp calculations. */ time: string; /** * Birth location latitude in decimal degrees. Determines Placidus house cusps and Ascendant. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local sidereal time for house calculations. */ longitude: number; /** * Timezone offset from UTC in decimal hours used for time conversion. */ timezone: number; /** * KP Newcomb ayanamsa value in degrees. Precession correction applied to convert tropical to sidereal positions. */ ayanamsa: number; /** * Ayanamsa system used, echoing the ayanamsa field of the request: "kp-newcomb", "kp-old", "lahiri", "raman" or "custom". */ ayanamsaType: string; /** * House system used (Placidus, standard for KP astrology). */ houseSystem: string; }; /** * Ascendant (Lagna) details with full KP stellar hierarchy. */ ascendant: { /** * Sidereal longitude of Ascendant (Lagna) in degrees. */ longitude: number; /** * Zodiac sign of the Ascendant. */ sign: string; /** * Ruling planet of the Ascendant sign (the rashi lord). In KP this is the weakest of the four lords, ranked below the star lord and sub lord, but it still sets the broad temperament of the Lagna. */ signLord: string; /** * Nakshatra (star) of the Ascendant. */ nakshatra: string; /** * Lord of the Ascendant nakshatra. */ nakshatraLord: string; /** * Nakshatra pada (1-4) of the Ascendant. */ pada: number; /** * KP star lord of the Ascendant position. */ starLord: string; /** * KP sub lord of the Ascendant. crucial for KP predictions. The Ascendant sub lord determines overall life promise. */ subLord: string; /** * KP sub-sub lord (SSL) of the Ascendant. Third level of the Vimshottari subdivision hierarchy, used for fine-tuning predictions. */ subSubLord: string; /** * KP number (1-249) for the Ascendant degree. */ kpNumber: number; }; /** * All 12 Placidus house cusps with KP stellar hierarchy. Cusp sub lords are the primary predictive tool in KP astrology. */ cusps: Array<{ /** * House number (1-12). */ house: number; /** * Placidus cusp longitude in sidereal degrees. */ longitude: number; /** * Zodiac sign at the cusp. */ sign: string; /** * Lord of the zodiac sign at the cusp (house owner). */ signLord: string; /** * Nakshatra at the cusp degree. */ nakshatra: string; /** * Lord of the nakshatra at the cusp. */ nakshatraLord: string; /** * Nakshatra pada (1-4) at the cusp. */ pada: number; /** * KP star lord of the cusp. */ starLord: string; /** * KP sub lord of the cusp. the deciding factor for house-level predictions in KP astrology. */ subLord: string; /** * KP sub-sub lord (SSL) of the cusp. Third level of Vimshottari subdivision for fine-grained cusp analysis. */ subSubLord: string; /** * KP number (1-249) for the cusp degree. */ kpNumber: number; }>; /** * Positions of all 7 visible planets with complete KP stellar breakdown. */ planets: Array<{ /** * Planet name (Sun through Saturn, 7 visible planets). */ planet: string; /** * Sidereal longitude in degrees (KP ayanamsa corrected). */ longitude: number; /** * Zodiac sign the planet occupies. */ sign: string; /** * House number (1-12) based on Placidus cusps. */ house: number; /** * Nakshatra the planet occupies. */ nakshatra: string; /** * Nakshatra lord (same as star lord). */ nakshatraLord: string; /** * Nakshatra pada (1-4). */ pada: number; /** * KP star lord, determines primary house signification. */ starLord: string; /** * KP sub lord, the decisive factor. Planet gives results of the houses signified by its sub lord. */ subLord: string; /** * KP sub-sub lord (SSL) of the planet. Third level of Vimshottari subdivision for precise timing analysis. */ subSubLord: string; /** * KP number (1-249). */ kpNumber: number; /** * True if planet is retrograde. Retrograde planets may delay or deny results in KP system. */ retrograde: boolean; }>; /** * Lunar nodes (Rahu and Ketu) with KP stellar hierarchy. Nodes are powerful agents that amplify the significations of their dispositors. */ nodes: { /** * Rahu (North Lunar Node), shadow planet, always retrograde, acts as agent of its sign lord and star lord. */ rahu: { /** * Sidereal longitude of Rahu (North Node). */ longitude: number; /** * Zodiac sign Rahu occupies. */ sign: string; /** * Occupied house number (1-12) based on Placidus cusps. */ house: number; /** * Nakshatra of Rahu. */ nakshatra: string; /** * KP star lord of Rahu. */ starLord: string; /** * KP sub lord of Rahu. */ subLord: string; /** * KP sub-sub lord (SSL) of Rahu. */ subSubLord: string; /** * KP number (1-249) locating Rahu in the 249-division sub-lord scheme. Each of the 249 divisions maps to a unique sign, star lord and sub lord triple, so one integer pins the position precisely enough for KP event timing. */ kpNumber: number; }; /** * Ketu (South Lunar Node), shadow planet, spiritual karmic indicator. */ ketu: { /** * Sidereal longitude of Ketu (South Node). Always 180 degrees from Rahu. */ longitude: number; /** * Zodiac sign Ketu occupies. */ sign: string; /** * Occupied house number (1-12) based on Placidus cusps. */ house: number; /** * Nakshatra of Ketu. */ nakshatra: string; /** * KP star lord of Ketu. */ starLord: string; /** * KP sub lord of Ketu. */ subLord: string; /** * KP sub-sub lord (SSL) of Ketu. */ subSubLord: string; /** * KP number (1-249) locating Ketu in the 249-division sub-lord scheme. Each of the 249 divisions maps to a unique sign, star lord and sub lord triple, so one integer pins the position precisely enough for KP event timing. */ kpNumber: number; }; }; /** * KP significators for event prediction and timing. Shows which planets signify each house (house-wise) and which houses each planet signifies (planet-wise). Strength order: Level 1 (planets in star of occupant) > Level 2 (occupants) > Level 3 (planets in star of owner) > Level 4 (house owner). */ significators: { houseWise: Array<{ /** * House number 1-12 */ house: number; significators: Array<{ /** * KP significator strength level (1-4). L1: planets in star of occupant (strongest). L2: occupant itself. L3: planets in star of owner. L4: sign owner. Lower number = stronger signification for this house. */ level: number; /** * Human-readable label for this KP significator level. */ description: string; /** * Planets signifying this house at this strength level. */ planets: Array; }>; /** * All significators in order of strength */ all: Array; }>; planetWise: Array<{ /** * Vedic graha (planet) being analyzed for its house significations. */ planet: string; signifies: Array<{ /** * KP significator strength level (1-4). L1 strongest, L4 weakest. */ level: number; /** * House numbers this planet signifies at this strength level. */ houses: Array; }>; /** * All houses signified in order of strength */ allHouses: Array; }>; }; /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus: 'general' | 'finance'; }; export type KpChartRequest = { /** * Birth date in YYYY-MM-DD format */ date: string; /** * Birth time in 24-hour HH:MM:SS format. CRITICAL for accurate Lagna and house calculations. */ time: string; /** * Birth location latitude in decimal degrees */ latitude: number; /** * Birth location longitude in decimal degrees */ longitude: number; /** * Timezone offset from UTC in hours. Defaults to 5.5 (IST) for Vedic astrology. */ timezone?: number | string; /** * Ayanamsa system for sidereal conversion. "kp-newcomb" uses the KP-Newcomb dynamic formula (most common for KP). "kp-old" uses the Krishnamurti original table. "lahiri" uses Lahiri/Chitrapaksha ayanamsa matching most traditional Vedic software. "raman" uses the B.V. Raman ayanamsa, about 1.45 degrees below Lahiri. "custom" allows providing your own value via ayanamsaValue. Defaults to "kp-newcomb". */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the Rahu and Ketu positions. Mean is the traditional Vedic default and what printed panchangs use; the choice can move a KP sub-lord in narrow boundary cases, where a span can be as small as 0.5 degrees. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; export type KpRulingPlanetsResponse = { /** * Calculation datetime (ISO 8601) */ datetime: string; /** * Observer location coordinates */ location: { /** * Observer latitude in decimal degrees, echoed back from the request. Sets the local sidereal time behind the KP ascendant and therefore the Lagna sublord. */ latitude: number; /** * Observer longitude in decimal degrees, echoed back from the request. East is positive, west is negative. */ longitude: number; /** * Numeric UTC offset in decimal hours the calculation consumed. An IANA name sent on the request is resolved to its DST-correct offset upstream, so this is always a number. */ timezone: number; }; /** * Lord of the weekday (Sun=Sunday through Saturn=Saturday) */ dayLord: string; /** * Lord of the zodiac sign where Moon is placed */ moonSignLord: string; /** * Lord of the nakshatra where Moon is placed */ moonStarLord: string; /** * Sub-lord of the KP division where Moon is placed */ moonSublord: string; /** * Sub-sub lord (SSL) of the KP division where Moon is placed */ moonSubSublord: string; /** * Lord of the rising zodiac sign (Ascendant) */ lagnaSignLord: string; /** * Lord of the nakshatra where Ascendant falls */ lagnaStarLord: string; /** * Sub-lord of the KP division where Ascendant falls */ lagnaSublord: string; /** * Sub-sub lord (SSL) of the KP division where Ascendant falls */ lagnaSubSublord: string; /** * Unique ruling planets in order of strength. Strongest planet appears first. */ rulingPlanets: Array; /** * Houses signified by each ruling planet (only when birthDate and birthTime provided). Based on 4-level KP significator hierarchy from birth chart. */ significators?: Array<{ /** * Planet abbreviation. */ planet: string; /** * Houses this planet signifies, ordered by KP 4-level strength: L1 (planet in star of occupant, strongest), L2 (planet occupies), L3 (planet in star of owner), L4 (planet owns). First element is the strongest signification, not the occupied house. */ signifies: Array; }>; /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes?: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus?: 'general' | 'finance'; }; export type KpRulingPlanetsIntervalResponse = { /** * Start of the KP ruling planets interval range (ISO 8601). */ startDatetime: string; /** * End of the KP ruling planets interval range (ISO 8601). */ endDatetime: string; /** * Time gap between consecutive ruling planet calculations in minutes. */ intervalMinutes: number; /** * Observer location coordinates used for erecting the Placidus prashna chart at each interval. */ location: { /** * Observer latitude used for Placidus house and Lagna (Ascendant) calculation. */ latitude: number; /** * Observer longitude used for local sidereal time and Ascendant degree. */ longitude: number; /** * Timezone offset applied to output times and sunrise-based Day Lord calculation. */ timezone: number; }; /** * Total number of intervals returned */ totalIntervals: number; /** * Ruling planets with significators at each interval */ intervals: Array<{ /** * UTC date for this interval (YYYY-MM-DD). */ date: string; /** * UTC time for this interval (HH:MM, 24-hour). */ time: string; /** * Full ISO 8601 timestamp for this interval. */ datetime: string; /** * Ruling planet of the weekday based on Hindu sunrise Vara. Changes at local sunrise, not midnight. */ dayLord: string; /** * Lord of the zodiac sign (rashi) where Moon is placed at this moment. */ moonSignLord: string; /** * Lord of the nakshatra (star, 1 of 27) where Moon is placed. Follows Vimshottari dasha sequence. */ moonStarLord: string; /** * KP sublord of Moons exact position within the nakshatra subdivision (1 of 249). */ moonSublord: string; /** * KP sub-sublord (SSL) of Moons position. Finest subdivision for precise timing. */ moonSubSublord: string; /** * Lord of the Ascendant (Lagna) zodiac sign. Changes roughly every 2 hours as houses rotate. */ lagnaSignLord: string; /** * Lord of the nakshatra where the Ascendant degree falls. */ lagnaStarLord: string; /** * KP sublord of the Ascendant degree. Changes every few minutes. key for birth time rectification. */ lagnaSublord: string; /** * KP sub-sublord of the Ascendant. Most granular level for pinpointing exact moments. */ lagnaSubSublord: string; /** * Unique set of ruling planets derived from Day Lord, Moon Sign/Star Lords, and Lagna Sign/Star Lords. In KP astrology, events manifest when dasha/transit planets match these ruling planets. */ rulingPlanets: Array; /** * KP significators for each ruling planet calculated from this moments Placidus chart. Shows which houses (1-12) each ruling planet signifies right now. Significators change as the Ascendant rotates through signs. */ significators: Array<{ /** * Ruling planet name. */ planet: string; /** * Unique house numbers this planet signifies, ordered by strength. Uses 4-level KP hierarchy: Level 1 (strongest) planets in star of occupant, Level 2 occupants, Level 3 planets in star of owner, Level 4 owner. */ signifies: Array; }>; /** * KP 4-level significator breakdown for the Moon Sign Lord planet. Shows which houses the Moon rashi lord activates at this moment, broken down by strength tier. */ moonSignLordSignifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * KP 4-level significator breakdown for the Moon Star Lord (nakshatra lord) planet. The star lord determines the nature of results Moon delivers. */ moonStarLordSignifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * KP 4-level significator breakdown for the Moon Sub Lord planet. The sub lord determines whether Moon-related events will manifest. */ moonSublordSignifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * KP 4-level significator breakdown for Moon itself. Shows which bhavas Moon directly activates based on its position and star lord in the current moment chart. */ moonSignifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; }>; /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus: 'general' | 'finance'; }; export type KpSublordChangesResponse = { /** * Vedic graha tracked for KP sublord transitions across the 249-division zodiac. */ planet: string; /** * Beginning of the sublord change search range (YYYY-MM-DD). */ startDate: string; /** * End of the sublord change search range (YYYY-MM-DD). */ endDate: string; /** * Total Krishnamurti sublord transitions detected. Moon crosses ~14 sublords per day due to its fast motion. */ totalChanges: number; /** * Chronological list of KP sublord boundary crossings. Each entry marks when the tracked graha moves from one Krishnamurti subdivision to the next in the 249-part zodiac. */ changes: Array<{ /** * Date of the sublord boundary crossing (YYYY-MM-DD). Adjusted to requested timezone. */ date: string; /** * Precise sublord transition time (HH:MM, 24-hour). Refined via binary search to ~1 minute accuracy. Adjusted to requested timezone. */ time: string; /** * Full datetime of the KP sublord change. Adjusted to requested timezone for prashna kundali timing. */ datetime: string; /** * Previous KP number (1-249) in the Vimshottari-based zodiac subdivision the planet occupied. */ fromKp: number; /** * New KP number (1-249) the planet enters. Each number maps to a unique star lord and sublord combination. */ toKp: number; /** * KP sublord planet before transition. The sublord determines whether an event signified by the star lord will manifest. */ fromSublord: string; /** * New KP sublord planet after transition. A change in sublord shifts the houses signified by the tracked planet. */ toSublord: string; /** * Nakshatra lord (star lord) before transition. Follows the Vimshottari dasha sequence of 9 planets. */ fromNakshatraLord: string; /** * Nakshatra lord after transition. Changes only when the planet crosses a nakshatra boundary (every 13d20m). */ toNakshatraLord: string; }>; }; export type KpSublordChangesRequest = { /** * Planet to track (case-insensitive). Valid values: Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn */ planet: string; /** * Start date for sublord change search (YYYY-MM-DD format) */ startDate: string; /** * End date for sublord change search (YYYY-MM-DD format) */ endDate: string; /** * IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC. IANA resolved to the DST-correct offset for startDate. Output times are converted to this timezone. Defaults to 0 (UTC). */ timezone?: number | string; /** * Ayanamsa system for sidereal conversion. "kp-newcomb" uses the KP-Newcomb dynamic formula, the most common choice for KP astrology. "kp-old" uses the Krishnamurti original table from KP Reader-1 with constant precession rate. "lahiri" uses Lahiri/Chitrapaksha ayanamsa, matching most traditional Vedic software. "raman" uses the B.V. Raman ayanamsa from Hindu Predictive Astrology, a recognised traditional school that sits about 1.45 degrees below Lahiri. Defaults to "kp-newcomb". */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman'; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the Rahu and Ketu positions. Mean is the traditional Vedic default and what printed panchangs use; the choice can move a KP sub-lord in narrow boundary cases, where a span can be as small as 0.5 degrees. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; export type KpRasiChangesResponse = { /** * Vedic graha being tracked for rasi parivartan (sign ingress) events. */ planet: string; /** * Beginning of the rasi change search range (YYYY-MM-DD). */ startDate: string; /** * End of the rasi change search range (YYYY-MM-DD). */ endDate: string; /** * Total rasi parivartan events detected in the date range. Moon averages 12-13 per month, Sun once per month. */ totalChanges: number; /** * Chronological list of rasi parivartan (zodiac sign change) events with precise ingress timestamps. Each entry marks when the tracked graha crosses a 30-degree sign boundary. */ changes: Array<{ /** * Date of the rasi ingress event (YYYY-MM-DD). Adjusted to requested timezone for local panchang use. */ date: string; /** * Precise ingress time (HH:MM, 24-hour). Calculated via binary search refinement to ~1 minute accuracy. Adjusted to requested timezone. */ time: string; /** * Full rasi parivartan datetime. Adjusted to requested timezone for transit calendar integration. */ datetime: string; /** * Zodiac sign (rashi) the planet is leaving. One of 12 sidereal signs using KP ayanamsa. */ fromSign: string; /** * Rashi lord (planetary ruler) of the departing sign. Determines the Vimshottari dasha connection. */ fromSignLord: string; /** * New zodiac sign entered by the planet. Marks the beginning of a new transit phase in Vedic gochar analysis. */ toSign: string; /** * Rashi lord of the newly entered sign. Key for KP significator analysis and dasha-transit matching. */ toSignLord: string; }>; }; export type KpRasiChangesRequest = { /** * Planet to track (case-insensitive). Valid values: Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn */ planet: string; /** * Start date for sign ingress search (YYYY-MM-DD format) */ startDate: string; /** * End date for sign ingress search (YYYY-MM-DD format) */ endDate: string; /** * IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC. IANA resolved to the DST-correct offset for startDate. Output times are converted to this timezone. Defaults to 0 (UTC). */ timezone?: number | string; /** * Ayanamsa system for sidereal conversion. "kp-newcomb" uses the KP-Newcomb dynamic formula, the most common choice for KP astrology. "kp-old" uses the Krishnamurti original table from KP Reader-1 with constant precession rate. "lahiri" uses Lahiri/Chitrapaksha ayanamsa, matching most traditional Vedic software. "raman" uses the B.V. Raman ayanamsa from Hindu Predictive Astrology, a recognised traditional school that sits about 1.45 degrees below Lahiri. Defaults to "kp-newcomb". */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman'; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the Rahu and Ketu positions. Mean is the traditional Vedic default and what printed panchangs use; the choice can move a KP sub-lord in narrow boundary cases, where a span can be as small as 0.5 degrees. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; export type KpPlanetsIntervalResponse = { /** * Start of the KP ephemeris interval range (ISO 8601). */ startDatetime: string; /** * End of the KP ephemeris interval range (ISO 8601). */ endDatetime: string; /** * Time gap between consecutive planetary snapshots in minutes. Determines the granularity of the KP transit table. */ intervalMinutes: number; /** * Total number of time points calculated (inclusive of both start and end). */ totalIntervals: number; /** * Ayanamsa system used for this calculation. "kp-newcomb" = KP-Newcomb (dynamic), "kp-old" = Krishnamurti original (constant rate), "lahiri" = Lahiri/Chitrapaksha. */ ayanamsa: string; /** * Ayanamsa value in degrees used for sidereal conversion. Verify this against your reference source to confirm correct ayanamsa is applied. */ ayanamsaValue: number; /** * Array of planetary snapshots at each time interval */ intervals: Array<{ /** * Date for this data point (YYYY-MM-DD). Adjusted to requested timezone. */ date: string; /** * Time for this data point (HH:MM). Adjusted to requested timezone. */ time: string; /** * Full datetime for this data point. Adjusted to requested timezone. */ datetime: string; /** * Planet positions keyed by planet name (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu) */ planets: { [key: string]: { /** * Sidereal longitude in degrees (0-360) using KP ayanamsa. The primary coordinate for all KP sublord lookups. */ longitude: number; /** * Degree within the current rashi (0-30). Useful for gauging how far into a sign the planet has progressed. */ degreeInSign: number; /** * Sidereal zodiac sign (rashi) the planet occupies at this interval. */ sign: string; /** * Rashi lord (sign ruler). First level of the KP significator hierarchy. Its house ownership determines L4 significations for this planet. */ signLord: string; /** * Nakshatra (lunar mansion) the planet occupies. One of 27 Vedic nakshatras spanning 13 degrees 20 minutes each. */ nakshatra: string; /** * Star lord (nakshatra ruler) from Vimshottari dasha sequence. Determines the nature of results this planet delivers. Its occupied and owned houses become L1 and L3 significations. */ nakshatraLord: string; /** * KP sublord within the 249-part zodiac division. The deciding factor in KP predictions. An event manifests only if the sublord signifies the relevant house. */ sublord: string; /** * KP sub-sublord (SSL). Third level of Vimshottari subdivision (2,241 divisions). Refines timing within the sublord period for precise event prediction. */ subSublord: string; /** * KP number (1-249) identifying the exact Vimshottari subdivision. Each number maps to a unique star lord and sublord combination. */ kpNumber: number; /** * True if the planet is in retrograde (vakri) motion. Rahu and Ketu are always retrograde. Retrograde planets deliver results differently in KP analysis. */ isRetrograde: boolean; }; }; }>; }; export type KpPlanetsIntervalRequest = { /** * Start datetime in ISO 8601 (YYYY-MM-DDTHH:MM:SS). Interpreted as local time when a non-zero timezone is provided (a trailing Z is accepted but ignored); with timezone 0 it is UTC. */ startDatetime: string; /** * End datetime in ISO 8601 (YYYY-MM-DDTHH:MM:SS). Maximum 7 days from start. Interpreted as local time when a non-zero timezone is provided (a trailing Z is accepted but ignored); with timezone 0 it is UTC. */ endDatetime: string; /** * Time between calculations in minutes. Range: 15 (quarter-hourly) to 1440 (daily). */ intervalMinutes: number; /** * Observer latitude in decimal degrees (for future Lagna calculations) */ latitude: number; /** * Observer longitude in decimal degrees (for future Lagna calculations) */ longitude: number; /** * IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC. IANA resolved to the DST-correct offset for the startDatetime date. When non-zero, all datetimes are treated as local time in this timezone (Z suffix is ignored). Defaults to 0 (UTC). */ timezone?: number | string; /** * Ayanamsa system for sidereal conversion. "kp-newcomb" uses the KP-Newcomb dynamic formula, the most common choice for KP astrology. "kp-old" uses the Krishnamurti original table from KP Reader-1 with constant precession rate. "lahiri" uses Lahiri/Chitrapaksha ayanamsa, matching most traditional Vedic software. "raman" uses the B.V. Raman ayanamsa from Hindu Predictive Astrology, a recognised traditional school that sits about 1.45 degrees below Lahiri. Defaults to "kp-newcomb". */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman'; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the Rahu and Ketu positions. Mean is the traditional Vedic default and what printed panchangs use; the choice can move a KP sub-lord in narrow boundary cases, where a span can be as small as 0.5 degrees. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; /** * A complete KP horary (Prashna) chart: the Ascendant from the number, the cusps and planets from the moment of the question, plus ruling planets and four-level significators. */ export type KpHoraryResponse = { /** * The number that was asked for, echoed so a stored chart is self describing. */ horaryNumber: number; /** * UTC instant the chart was cast for, resolved from the date, time and timezone. */ questionTime: string; /** * Sidereal frame used, echoed back. */ ayanamsaType: string; /** * Degrees subtracted from every tropical longitude to produce this chart. Compare it against your reference software before treating a placement difference as a disagreement. */ ayanamsaDegrees: number; /** * The Ascendant the horary number produced. This is the ONLY part of the chart that comes from the number; everything else comes from the sky at the moment of the question. */ ascendant: { /** * Sidereal longitude of the horary Ascendant, taken as the MIDPOINT of the sub division the number names. */ longitude: number; /** * Degrees into the sign, 0 to 30, which is what a chart displays. */ degreeInSign: number; /** * Zodiac sign (rashi) of this point. */ sign: string; /** * Nakshatra (star) this point falls in. */ star: string; /** * Nakshatra lord (star lord), the second level of the KP hierarchy. */ starLord: string; /** * Sub lord, the decisive level in KP. A cusp sub lord is what answers the question: it is read for whether the matter is promised, before any timing is attempted. */ subLord: string; /** * KP horary number 1 to 249 of the sub division holding this point. Matches the standard published KP table. */ kpNumber: number; /** * Sidereal longitude where this numbered sub division begins. */ spanFrom: number; /** * Sidereal longitude where it ends. The Ascendant sits midway between this and spanFrom. */ spanTo: number; }; /** * Twelve Placidus cusps, house 1 first. House 1 is the horary Ascendant; the other eleven follow from the house frame that Ascendant implies at this latitude. */ cusps: Array<{ /** * House (bhava) number 1 to 12. */ house: number; /** * Sidereal longitude of the cusp. */ longitude: number; /** * Zodiac sign (rashi) of this point. */ sign: string; /** * Nakshatra (star) this point falls in. */ star: string; /** * Nakshatra lord (star lord), the second level of the KP hierarchy. */ starLord: string; /** * Sub lord, the decisive level in KP. A cusp sub lord is what answers the question: it is read for whether the matter is promised, before any timing is attempted. */ subLord: string; /** * KP horary number 1 to 249 of the sub division holding this point. Matches the standard published KP table. */ kpNumber: number; }>; /** * The nine grahas at the moment of the question, placed against the horary cusps. These come from the real sky, not from the number. */ planets: Array<{ /** * Graha name. */ planet: string; /** * Sidereal longitude at the moment of the question. */ longitude: number; /** * Placidus house the graha occupies in this horary chart, counted against the cusps above rather than by whole sign. */ house: number; /** * Retrograde motion flag. */ isRetrograde: boolean; /** * Sub-sub lord, the fourth KP level, used to refine timing. */ subSubLord: string; /** * Zodiac sign (rashi) of this point. */ sign: string; /** * Nakshatra (star) this point falls in. */ star: string; /** * Nakshatra lord (star lord), the second level of the KP hierarchy. */ starLord: string; /** * Sub lord, the decisive level in KP. A cusp sub lord is what answers the question: it is read for whether the matter is promised, before any timing is attempted. */ subLord: string; /** * KP horary number 1 to 249 of the sub division holding this point. Matches the standard published KP table. */ kpNumber: number; }>; /** * Ruling planets at the moment of the question. NOTE the lagna values here are from the TIME-based ascendant, which is the classical ruling-planet definition, not from the horary number. */ rulingPlanets: { /** * Lord of the Hindu weekday, counted from sunrise. */ dayLord: string; /** * Sign lord of the Moon. */ moonSignLord: string; /** * Star lord of the Moon. */ moonStarLord: string; /** * Sub lord of the Moon. */ moonSublord: string; /** * Sub-sub lord of the Moon. */ moonSubSublord: string; /** * Sign lord of the ascendant at the question moment. */ lagnaSignLord: string; /** * Star lord of that ascendant. */ lagnaStarLord: string; /** * Sub lord of that ascendant. */ lagnaSublord: string; /** * Sub-sub lord of that ascendant. */ lagnaSubSublord: string; /** * The distinct ruling planets in KP order of strength. They validate the chart: when they repeat the significators of the houses the question needs, the judgment is considered reliable. */ rulingPlanets: Array; }; /** * KP significators for event prediction and timing. Shows which planets signify each house (house-wise) and which houses each planet signifies (planet-wise). Strength order: Level 1 (planets in star of occupant) > Level 2 (occupants) > Level 3 (planets in star of owner) > Level 4 (house owner). */ significators: { houseWise: Array<{ /** * House number 1-12 */ house: number; significators: Array<{ /** * KP significator strength level (1-4). L1: planets in star of occupant (strongest). L2: occupant itself. L3: planets in star of owner. L4: sign owner. Lower number = stronger signification for this house. */ level: number; /** * Human-readable label for this KP significator level. */ description: string; /** * Planets signifying this house at this strength level. */ planets: Array; }>; /** * All significators in order of strength */ all: Array; }>; planetWise: Array<{ /** * Vedic graha (planet) being analyzed for its house significations. */ planet: string; signifies: Array<{ /** * KP significator strength level (1-4). L1 strongest, L4 weakest. */ level: number; /** * House numbers this planet signifies at this strength level. */ houses: Array; }>; /** * All houses signified in order of strength */ allHouses: Array; }>; }; /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus: 'general' | 'finance'; }; export type KpHoraryRequest = { /** * Horary number from 1 to 249, given by the querent while focused on their question. It maps to one of the 249 KP sub divisions of the zodiac, and that division sets the Ascendant of the chart. The querent should give the first number that comes to mind and use it once for that question; the astrologer never chooses it. Numbers outside 1 to 249 are rejected rather than wrapped, because a wrapped number would silently answer a different question. */ horaryNumber: number; /** * Date the question was taken up for judgment, YYYY-MM-DD. Not a birth date: a horary chart needs no birth details at all, which is the point of the method. */ date: string; /** * Time the question was taken up for judgment, 24-hour HH:MM:SS. In KP practice this is the moment the astrologer receives and understands the question, not the moment the querent first thought of it. It sets every planetary position and all twelve cusps except the Ascendant. */ time: string; /** * Latitude where the question is judged, decimal degrees. The house cusps are Placidus and therefore latitude dependent, so this is the place of judgment, not the querent birthplace. */ latitude: number; /** * Longitude where the question is judged, decimal degrees. */ longitude: number; /** * Timezone: IANA name (e.g. "Asia/Kolkata") OR decimal hours from UTC. Defaults to 5.5. */ timezone?: number | string; /** * Ayanamsa system for sidereal conversion. "kp-newcomb" uses the KP-Newcomb dynamic formula (most common for KP). "kp-old" uses the Krishnamurti original table. "lahiri" uses Lahiri/Chitrapaksha ayanamsa matching most traditional Vedic software. "raman" uses the B.V. Raman ayanamsa, about 1.45 degrees below Lahiri. "custom" allows providing your own value via ayanamsaValue. Defaults to "kp-newcomb". */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the Rahu and Ketu positions. Mean is the traditional Vedic default and what printed panchangs use; the choice can move a KP sub-lord in narrow boundary cases, where a span can be as small as 0.5 degrees. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; export type RashiListResponse = Array<{ /** * Unique slug identifier for the rashi. Used in URL paths and cross-references. */ id: string; /** * Western zodiac sign name corresponding to this Vedic rashi. */ name: string; /** * Sanskrit name of the rashi as used in Vedic astrology (Jyotish). */ vedicName: string; /** * Approximate sidereal date range when the Sun transits this rashi. */ dateRange: string; /** * Traditional symbol associated with this zodiac sign. */ symbol: string; /** * Aditya (solar deity) governing this rashi in Vedic tradition. */ energy: string; /** * Key personality traits and behavioral tendencies of natives born under this rashi. */ characteristics: string; }>; export type RashiResponse = { /** * Unique slug identifier for the rashi. Used in URL paths and cross-references. */ id: string; /** * Western zodiac sign name corresponding to this Vedic rashi. */ name: string; /** * Sanskrit name of the rashi as used in Vedic astrology (Jyotish). */ vedicName: string; /** * Approximate sidereal date range when the Sun transits this rashi. */ dateRange: string; /** * Traditional symbol associated with this zodiac sign. */ symbol: string; /** * Aditya (solar deity) governing this rashi in Vedic tradition. */ energy: string; /** * Key personality traits and behavioral tendencies of natives born under this rashi. */ characteristics: string; }; export type NakshatraListResponse = Array<{ /** * Unique slug identifier for the nakshatra. Used in URL paths and cross-references. */ id: string; /** * Nakshatra name as used in Vedic astrology. One of 27 lunar mansions spanning 13 degrees 20 minutes each. */ name: string; /** * Sequential number (1-27) of this nakshatra in the zodiac starting from 0 degrees Aries. */ number: number; /** * Sidereal longitude range this nakshatra occupies within its zodiac sign. */ range: string; /** * Ruling planet (nakshatra lord) used in Vimshottari dasha calculations. Determines the planetary period sequence. */ lord: string; /** * Presiding deity of the nakshatra. Influences the spiritual qualities and mythology associated with natives. */ deity: string; /** * Traditional symbol representing this nakshatra. Reflects its core nature and energy. */ symbol: string; /** * Personality traits, behavioral tendencies, and life themes for natives born under this nakshatra. */ characteristics: string; /** * Traditional Vedic remedies including mantras, gemstones, and rituals for this nakshatra. */ remedies: { /** * Recommended mantras for this nakshatra to enhance positive qualities. */ mantras: string; /** * Recommended gemstones aligned with the ruling planet of this nakshatra. */ gemstones: string; /** * Spiritual practices and daily rituals beneficial for natives of this nakshatra. */ rituals: string; }; }>; export type NakshatraResponse = { /** * Unique slug identifier for the nakshatra. Used in URL paths and cross-references. */ id: string; /** * Nakshatra name as used in Vedic astrology. One of 27 lunar mansions spanning 13 degrees 20 minutes each. */ name: string; /** * Sequential number (1-27) of this nakshatra in the zodiac starting from 0 degrees Aries. */ number: number; /** * Sidereal longitude range this nakshatra occupies within its zodiac sign. */ range: string; /** * Ruling planet (nakshatra lord) used in Vimshottari dasha calculations. Determines the planetary period sequence. */ lord: string; /** * Presiding deity of the nakshatra. Influences the spiritual qualities and mythology associated with natives. */ deity: string; /** * Traditional symbol representing this nakshatra. Reflects its core nature and energy. */ symbol: string; /** * Personality traits, behavioral tendencies, and life themes for natives born under this nakshatra. */ characteristics: string; /** * Traditional Vedic remedies including mantras, gemstones, and rituals for this nakshatra. */ remedies: { /** * Recommended mantras for this nakshatra to enhance positive qualities. */ mantras: string; /** * Recommended gemstones aligned with the ruling planet of this nakshatra. */ gemstones: string; /** * Spiritual practices and daily rituals beneficial for natives of this nakshatra. */ rituals: string; }; }; /** * Complete upagraha positions for a birth chart */ export type UpagrahaResponse = { /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Time-based upagrahas derived from the 8-part division of day or night. Gulika and Mandi are from Saturn segment, others from Sun, Mars, Mercury, Jupiter segments. Positions depend on birth time, location, and weekday. */ timeBased: Array<{ /** * Upagraha name. Time-based: Gulika, Mandi, Kala, Mrityu, Ardhaprahara, Yamaghantaka. Sun-based: Dhuma, Vyatipata, Parivesha, Indra Chapa, Upaketu. */ name: string; /** * Sidereal longitude in degrees (0 to 360). Used for house placement and aspect analysis. */ longitude: number; /** * Zodiac sign (rashi) the upagraha occupies. One of 12 Vedic rashis from Aries to Pisces. */ rashi: string; /** * Degree position within the occupied rashi (0 to 30). */ degreeInSign: number; /** * Nakshatra (lunar mansion) the upagraha occupies. One of 27 Vedic nakshatras. */ nakshatra: string; /** * Nakshatra number (1 to 27). Ashwini = 1, Bharani = 2, through Revati = 27. */ nakshatraIndex: number; /** * Pada (quarter) within the nakshatra (1 to 4). Each pada spans 3 degrees 20 minutes. */ nakshatraPada: number; }>; /** * Sun-longitude-based upagrahas (Dhuma group). Pure arithmetic from the Sun sidereal position. Dhuma = Sun + 133d20m, then each derived from the previous. */ sunBased: Array<{ /** * Upagraha name. Time-based: Gulika, Mandi, Kala, Mrityu, Ardhaprahara, Yamaghantaka. Sun-based: Dhuma, Vyatipata, Parivesha, Indra Chapa, Upaketu. */ name: string; /** * Sidereal longitude in degrees (0 to 360). Used for house placement and aspect analysis. */ longitude: number; /** * Zodiac sign (rashi) the upagraha occupies. One of 12 Vedic rashis from Aries to Pisces. */ rashi: string; /** * Degree position within the occupied rashi (0 to 30). */ degreeInSign: number; /** * Nakshatra (lunar mansion) the upagraha occupies. One of 27 Vedic nakshatras. */ nakshatra: string; /** * Nakshatra number (1 to 27). Ashwini = 1, Bharani = 2, through Revati = 27. */ nakshatraIndex: number; /** * Pada (quarter) within the nakshatra (1 to 4). Each pada spans 3 degrees 20 minutes. */ nakshatraPada: number; }>; }; export type UpagrahaRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; /** * Complete Ashtakavarga analysis for a birth chart */ export type AshtakavargaResponse = { /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Individual planetary strength grids (Bhinnashtakavarga). Eight entries: one for each of the 7 classical planets plus Lagna. Each entry shows how many of the 8 contributors (7 planets + Lagna) give benefic points to that planet in each of the 12 signs. */ bhinnashtakavarga: Array<{ /** * Planet or Lagna name. Seven classical planets (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn) plus Lagna (Ascendant). Rahu and Ketu are excluded from Ashtakavarga per BPHS. */ planet: string; /** * Benefic points (bindus) for each of the 12 signs, ordered Aries through Pisces (index 0 = Aries, index 11 = Pisces). Each value ranges from 0 to 8, representing how many of the 8 contributors (7 planets + Lagna) provide a benefic point for this planet in that sign. Higher bindus indicate stronger planetary support. */ bindus: Array; /** * Sum of bindus across all 12 signs. This total is constant per planet regardless of birth chart: Sun = 48, Moon = 49, Mars = 39, Mercury = 54, Jupiter = 56, Venus = 52, Saturn = 39, Lagna = 49. Useful as a validation checksum. */ total: number; }>; /** * Sarvashtakavarga (SAV) combining all 7 planetary Bhinnashtakavarga scores per sign. Total is always 337. */ sarvashtakavarga: { /** * Combined benefic points per sign from all 7 planets (Lagna excluded from SAV), ordered Aries through Pisces. Higher values indicate stronger signs for transit predictions and house strength analysis. Average is approximately 28 per sign. */ bindus: Array; /** * Sum of all SAV bindus across 12 signs. Always equals 337 for every birth chart. This mathematical constant serves as a validation checksum for the calculation. */ total: number; }; /** * Reduced Bhinnashtakavarga after two-step Shodhana (purification) per BPHS Ch. 67-68. Step 1: Trikona Shodhana subtracts minimum bindu among trine groups (1-5-9, 2-6-10, 3-7-11, 4-8-12). Step 2: Ekadipati Shodhana adjusts dual-lordship sign pairs (Mars: Aries/Scorpio, Venus: Taurus/Libra, Mercury: Gemini/Virgo, Jupiter: Sagittarius/Pisces, Saturn: Capricorn/Aquarius). Used as input for Shodhya Pinda planetary strength. */ reducedBhinnashtakavarga: Array<{ /** * Planet or Lagna name. Seven classical planets (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn) plus Lagna (Ascendant). Rahu and Ketu are excluded from Ashtakavarga per BPHS. */ planet: string; /** * Benefic points (bindus) for each of the 12 signs, ordered Aries through Pisces (index 0 = Aries, index 11 = Pisces). Each value ranges from 0 to 8, representing how many of the 8 contributors (7 planets + Lagna) provide a benefic point for this planet in that sign. Higher bindus indicate stronger planetary support. */ bindus: Array; /** * Sum of bindus across all 12 signs. This total is constant per planet regardless of birth chart: Sun = 48, Moon = 49, Mars = 39, Mercury = 54, Jupiter = 56, Venus = 52, Saturn = 39, Lagna = 49. Useful as a validation checksum. */ total: number; }>; /** * Reduced Sarvashtakavarga. Sum of the 7 reduced planetary Bhinnashtakavarga values per sign (Lagna excluded). Indicates relative sign strength after Shodhana purification. */ reducedSarvashtakavarga: { /** * Combined benefic points per sign from all 7 planets (Lagna excluded from SAV), ordered Aries through Pisces. Higher values indicate stronger signs for transit predictions and house strength analysis. Average is approximately 28 per sign. */ bindus: Array; /** * Sum of all SAV bindus across 12 signs. Always equals 337 for every birth chart. This mathematical constant serves as a validation checksum for the calculation. */ total: number; }; /** * Shodhya Pinda planetary strength scores per BPHS Ch. 69. Derived from Reduced Ashtakavarga. Each entry contains Rashi Pinda (sign-weighted strength), Graha Pinda (planet-association-weighted strength), and total Shodhya Pinda. Used for comparing planetary strength, predicting dasha results, and transit analysis. */ shodhyaPinda: Array<{ /** * Planet or Lagna name. Shodhya Pinda is calculated for all 7 classical planets plus Lagna. */ planet: string; /** * Rashi Pinda component. Weighted sum of reduced Bhinnashtakavarga bindus per sign multiplied by Rashi Gunakar weights per BPHS Ch. 69. Higher values indicate stronger sign-based planetary strength. */ rashiPinda: number; /** * Graha Pinda component. Weighted sum of reduced Bhinnashtakavarga bindus per sign multiplied by the Graha Gunakar of planets occupying each sign (Sun=5, Moon=5, Mars=8, Mercury=5, Jupiter=10, Venus=7, Saturn=5). Reflects planetary association strength. */ grahaPinda: number; /** * Total Shodhya Pinda (Rashi Pinda + Graha Pinda). Primary planetary strength score derived from Ashtakavarga reduction. Used for comparing relative strength of planets in a birth chart and predicting dasha period results. */ shodhyaPinda: number; }>; /** * Sign names in order, for mapping bindus array indices to zodiac signs. Index 0 = Aries through index 11 = Pisces. */ signs: Array<'Aries' | 'Taurus' | 'Gemini' | 'Cancer' | 'Leo' | 'Virgo' | 'Libra' | 'Scorpio' | 'Sagittarius' | 'Capricorn' | 'Aquarius' | 'Pisces'>; }; export type AshtakavargaRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; /** * Complete Shadbala (six-fold planetary strength) analysis for a birth chart per Brihat Parashara Hora Shastra (BPHS). */ export type ShadbalaResponse = { /** * Localized name and one-line meaning for each of the six Shadbala components, keyed by the same field names each planet entry uses. Join it to render a readable strength breakdown in any of the eight supported languages instead of showing six untranslated Sanskrit terms. */ balaThemes: { /** * Localized label and meaning for one Shadbala component. */ sthanaBala: { /** * Localized name of this Shadbala component, suitable for a table header or a bar label. */ name: string; /** * One-line localized explanation of what this component measures. */ meaning: string; }; /** * Localized label and meaning for one Shadbala component. */ digBala: { /** * Localized name of this Shadbala component, suitable for a table header or a bar label. */ name: string; /** * One-line localized explanation of what this component measures. */ meaning: string; }; /** * Localized label and meaning for one Shadbala component. */ kalaBala: { /** * Localized name of this Shadbala component, suitable for a table header or a bar label. */ name: string; /** * One-line localized explanation of what this component measures. */ meaning: string; }; /** * Localized label and meaning for one Shadbala component. */ chestaBala: { /** * Localized name of this Shadbala component, suitable for a table header or a bar label. */ name: string; /** * One-line localized explanation of what this component measures. */ meaning: string; }; /** * Localized label and meaning for one Shadbala component. */ naisargikaBala: { /** * Localized name of this Shadbala component, suitable for a table header or a bar label. */ name: string; /** * One-line localized explanation of what this component measures. */ meaning: string; }; /** * Localized label and meaning for one Shadbala component. */ drikBala: { /** * Localized name of this Shadbala component, suitable for a table header or a bar label. */ name: string; /** * One-line localized explanation of what this component measures. */ meaning: string; }; }; /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Shadbala analysis for all 7 classical planets. Ordered: Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn. Each entry contains all 6 strength components, total strength in virupas and Rupas, Ishta/Kashta Phala, minimum required threshold, strength ratio, and relative rank. */ planets: Array<{ /** * Planet name. One of the 7 classical Vedic planets (Saptgraha): Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn. Rahu and Ketu are excluded from Shadbala per BPHS. */ planet: string; /** * Sthana Bala (Positional Strength) in virupas. Sum of 5 sub-components: Uchcha Bala (exaltation strength), Saptavargaja Bala (7-divisional friendship), Ojayugma Bala (odd/even sign placement), Kendradi Bala (angular house strength), and Drekkana Bala (decanate gender match). Higher values indicate stronger positional placement. */ sthanaBala: number; /** * Dig Bala (Directional Strength) in virupas. Based on angular distance from the planets directional strength house. Sun and Mars are strong at MC (10th), Moon and Venus at IC (4th), Mercury and Jupiter at ASC (1st), Saturn at DSC (7th). Range 0 to 60. */ digBala: number; /** * Kala Bala (Temporal Strength) in virupas. Sum of 8 sub-components: Nathonnatha (day/night strength), Paksha (lunar phase), Tribhaga (third of day/night), Vara (weekday lord), Hora (planetary hour), Abda (year lord), Masa (month lord), and Ayana (declination-based seasonal strength). */ kalaBala: number; /** * Chesta Bala (Motional Strength) in virupas. Based on planetary motion, so a retrograde graha scores higher because it is closer to Earth and working hardest. The Sun uses its Ayana Bala and the Moon its elongation from the Sun, per BPHS. Mars, Mercury, Jupiter, Venus and Saturn use the Sheeghra Kendra, the arc between the sheeghrochcha and the mean of the true and mean longitudes, with the roles of the mean Sun and the graha swapped for Mercury and Venus. Range 0 to 60. */ chestaBala: number; /** * Naisargika Bala (Natural Strength) in virupas. Fixed luminosity-based values per BPHS: Sun 60.00, Moon 51.43, Venus 42.86, Jupiter 34.29, Mercury 25.71, Mars 17.14, Saturn 8.57. Invariant across all charts. */ naisargikaBala: number; /** * Drik Bala (Aspectual Strength) in virupas. Strength gained or lost from the aspects a graha receives. Benefic aspects add strength and malefic aspects reduce it, so this value is negative when malefics dominate. Mercury counts as benefic or malefic by the company it keeps in its own sign, decided by count with the nearest graha breaking a tie, and the Moon by its paksha. Uses the graded Sputa Drishti curve of BPHS Ch. 26 with the Vishesha (special) aspects of Mars, Jupiter and Saturn applied at their precise DEGREE ranges rather than by whole sign. */ drikBala: number; /** * Total Shadbala in virupas (Shashtiamsas). Sum of all 6 strength components. Higher total indicates a stronger planet in the birth chart. Used for comparing relative planetary strength and evaluating dasha period potential. */ totalVirupas: number; /** * Total Shadbala in Rupas (totalVirupas / 60). 1 Rupa equals 60 virupas. Rupas are the standard unit for comparing planetary strength against minimum required thresholds. */ totalRupas: number; /** * Minimum required strength in Rupas per BPHS. Sun 5.0, Moon 6.0, Mars 5.0, Mercury 7.0, Jupiter 6.5, Venus 5.5, Saturn 5.0. A planet below its minimum is considered weak and may underperform in its dasha periods. */ minRequired: number; /** * Ratio of actual Rupas to minimum required (totalRupas / minRequired). Values above 1.0 indicate sufficient strength. Higher ratios mean proportionally stronger planets. Used for ranking planets by relative strength. */ strengthRatio: number; /** * Ishta Phala (auspicious strength) in virupas. Derived from Uchcha Bala and Chesta Bala: sqrt(ucchaBala * chestaBala). Indicates the planets capacity to produce favorable results during its dasha and transit periods. */ ishtaPhala: number; /** * Kashta Phala (malefic strength) in virupas. Derived from complements of Uchcha and Chesta Bala: sqrt((60 - ucchaBala) * (60 - chestaBala)). Indicates the planets capacity to produce unfavorable results. Zero when both Uchcha and Chesta exceed 60. */ kashtaPhala: number; /** * Relative strength rank among the 7 planets (1 = strongest, 7 = weakest). Ranked by strengthRatio (actual/required), not raw virupas, so each planet is compared fairly against its own BPHS threshold. */ relativeRank: number; }>; }; export type ShadbalaRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; /** * The twelve Arudha padas of a birth chart, computed per the Jaimini rule with the classical exception applied. */ export type ArudhaResponse = { /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Zodiac sign of the Ascendant (Lagna), which anchors the twelve bhavas the padas are derived from. */ lagnaRashi: string; /** * Zodiac sign of the Arudha Lagna (AL), the pada of the first house and the single most used value in this response. Repeated at the top level so a client rendering only the AL does not have to search the array. */ arudhaLagna: string; /** * Zodiac sign of the Upapada (UL), the pada of the twelfth house, read for marriage and its durability. The second most used value, so it is also lifted to the top level. */ upapada: string; /** * All twelve Arudha padas in bhava order, a1 through a12. Each carries the lord and the count it came from, so the derivation can be checked by hand. */ padas: Array<{ /** * Pada identifier, a1 through a12, matching the bhava it belongs to. a1 is the Arudha Lagna and a12 the Upapada. */ id: string; /** * Practitioner shorthand written on a chart: AL for the Arudha Lagna, A2 through A11, and UL for the Upapada. */ abbreviation: string; /** * Classical Sanskrit name of the pada, for example Arudha Lagna, Dhana Pada, Dara Pada, Upapada. */ name: string; /** * Bhava (house) number 1-12 whose pada this is. The pada is the perceived, outward form of that bhava. */ house: number; /** * Zodiac sign (rashi) occupying that bhava, counted whole-sign from the Lagna. The count to the pada starts here. */ bhavaRashi: string; /** * Lord of the bhava sign. The pada is found by counting to this graha and then the same distance again. */ lord: string; /** * Zodiac sign the bhava lord occupies, which sets the length of the count. */ lordRashi: string; /** * Zodiac sign the pada falls in, after the classical exception is applied. This is the answer most readings start from. */ rashi: string; /** * Which house from the Lagna the pada sits in, counted inclusively 1-12. Reading a pada against the natal Lagna is how its strength is judged. */ houseFromLagna: number; /** * True when the raw pada landed in the same bhava or the seventh from it and was moved to the tenth from there, as the classical rule requires. Surfaced so a reader can see exactly why a pada sits where it does, which is the step implementations most often skip. */ exceptionApplied: boolean; /** * Short label for what this pada is read for, sized for a table cell. */ meaning: string; /** * What this pada governs. Padas describe how a matter is PERCEIVED, which is what separates them from the bhava significations of the same house. */ significations: string; }>; }; export type ArudhaRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; /** * Chara Karakas for a birth chart: the movable significators of Jaimini astrology, ranked by how far each graha has advanced into its sign. */ export type CharaKarakaResponse = { /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Scheme the ranking used, echoed back so a cached or logged response is self describing. */ scheme: 'seven' | 'eight'; /** * Graha holding the Atmakaraka office, the most consequential single value in Jaimini analysis. Lifted to the top level so a client reading only the Atmakaraka does not have to search the array. */ atmakaraka: string; /** * Graha holding the Darakaraka office, read for the spouse. The second most requested value, so it is also lifted to the top level. */ darakaraka: string; /** * Karaka offices in descending rank, Atmakaraka first. Eight entries in the eight-karaka scheme, seven in the seven-karaka scheme. */ karakas: Array<{ /** * Karaka office identifier: atmakaraka, amatyakaraka, bhratrikaraka, matrikaraka, pitrikaraka, putrakaraka, gnatikaraka, darakaraka. Returned in descending rank, so the first entry is always the Atmakaraka. */ id: string; /** * Classical Sanskrit name of the karaka office. */ name: string; /** * Practitioner shorthand: AK, AmK, BK, MK, PiK, PK, GK, DK, in descending rank order. */ abbreviation: string; /** * Graha holding this office in this chart. */ graha: string; /** * Zodiac sign (rashi) the graha occupies. */ rashi: string; /** * Degree the graha has advanced into its sign, 0 to 30. This is the figure a chart displays. */ degreeInRashi: number; /** * The degree actually ranked. Identical to degreeInRashi for every graha except Rahu, where it is 30 minus that value because Rahu advances backward through the sign. Returned so the ordering can be checked without knowing the rule. */ rankingDegree: number; /** * True only for Rahu, flagging that its degree was measured from the end of the sign rather than the start. */ isReversed: boolean; /** * Short label for what this karaka is read for, sized for a table cell. */ meaning: string; /** * What this karaka office governs in a reading. */ significations: string; }>; }; export type CharaKarakaRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; /** * Which Chara Karaka scheme to rank. "eight" includes Rahu, counting its degree in reverse because it moves retrograde, and returns eight offices including Pitrikaraka. "seven" ranks only the seven classical grahas and drops Pitrikaraka. Ketu is excluded from both, since it always mirrors the Rahu degree exactly. The two schemes can produce a different Atmakaraka for the same chart, so select the one your reference software uses. Defaults to "eight". */ scheme?: 'seven' | 'eight'; }; /** * Complete Bhava Bala (house strength) analysis per Brihat Parashara Hora Shastra, with a localized house-meaning legend. */ export type BhavaBalaResponse = { /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * House frame the bhavas were built on. Always sripati: Bhava Bala is defined on unequal bhava madhyas, not on whole signs. */ houseSystem: string; /** * Bhava Bala for all twelve houses in order, house 1 first. Each entry carries its own components so a client can explain a score rather than just display it. */ bhavas: Array<{ /** * Bhava (house) number 1 to 12, counted from the Lagna. House 1 is the Ascendant bhava, house 10 the career bhava, house 7 the partnership bhava. */ house: number; /** * Zodiac sign holding this bhavas madhya (mid-cusp). Under the Sripati house system the bhavas are unequal, so this is NOT always the nth sign from the Lagna, and two bhavas can share a sign while another sign holds none. */ rashi: string; /** * Bhava madhya (mid-cusp) longitude in degrees, sidereal Lahiri. The point every strength component below is measured at. Bhavas 1, 4, 7 and 10 sit on the Ascendant, IC, Descendant and Midheaven; the rest trisect the quadrants between them. */ madhya: number; /** * Bhavadhipati (house lord), the ruler of the sign holding the madhya. Its Shadbala is what this bhava inherits, so a house ruled by a strong graha starts strong. */ lord: string; /** * Bhavadhipati Bala in virupas: the total Shadbala of the house lord, carried across unchanged. The dominant term of the three, typically 250 to 650. Two bhavas ruled by the same graha therefore share this value exactly. */ bhavadhipatiBala: number; /** * Bhava Digbala (directional strength) in virupas, 0 to 60 in steps of 10. Each rashi class is strongest in one cardinal bhava (human signs at the Lagna, quadruped at the 10th, watery at the 4th, Scorpio at the 7th) and loses 10 virupas per bhava of separation, reaching 0 at the seventh from it. */ digBala: number; /** * Bhava Drishti Bala (aspectual strength) in virupas, computed on the bhava madhya exactly as Graha Drik Bala is computed on a graha. Benefic aspects add and malefic aspects subtract, so this term is often negative. */ drishtiBala: number; /** * Total Bhava Bala in virupas, the sum of the three components above. Use it to compare houses within one chart: the strongest bhavas are the life areas that unfold with least resistance. */ totalVirupas: number; /** * Total Bhava Bala in rupas (totalVirupas / 60). 1 rupa equals 60 virupas. Rupas are the conventional unit in classical tables. */ totalRupas: number; /** * Strength rank among the twelve bhavas, 1 = strongest. Ranked on totalVirupas, so it never disagrees with the published totals. */ rank: number; }>; /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus: 'general' | 'finance'; }; export type BhavaBalaRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; /** * Bhav Chalit (Chalit Kundli): every graha placed by unequal Sripati bhava, with the whole-sign placement beside it for comparison. */ export type BhavChalitResponse = { /** * The sidereal frame this response was computed in, so a cached or forwarded payload is self describing. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * House frame used to build the bhavas. Always sripati for the Chalit chart. */ houseSystem: string; /** * Sidereal Lahiri Ascendant in degrees. The madhya of bhava 1. */ ascendant: number; /** * Sidereal Lahiri Midheaven in degrees. The madhya of bhava 10. */ midheaven: number; /** * The twelve Sripati bhavas in order with their boundaries and occupants. */ bhavas: Array<{ /** * Bhava number 1 to 12. */ house: number; /** * Bhava sandhi (junction) opening this bhava, in degrees. The midpoint between this madhya and the previous one. A graha exactly on a sandhi belongs to the bhava it opens. */ start: number; /** * Bhava madhya (mid-cusp) in degrees. Bhavas 1, 4, 7 and 10 sit exactly on the Ascendant, IC, Descendant and Midheaven; the other eight trisect the quadrant arcs between them. */ madhya: number; /** * Bhava sandhi closing this bhava. Identical to the next bhavas start, so the twelve bhavas tile the zodiac with no gap. */ end: number; /** * Width of the bhava in degrees. Rarely 30: the Ascendant and Midheaven are only 90 degrees apart by coincidence of latitude and epoch, so quadrants stretch and squeeze and the bhavas with them. */ span: number; /** * Sign holding the madhya. Because bhavas are unequal, two bhavas can share a sign while another sign holds no madhya at all. */ rashi: string; /** * Grahas falling inside this bhava. Empty when the bhava is unoccupied. */ grahas: Array; }>; /** * All nine grahas with both their Chalit bhava and their whole-sign Rashi house, plus a moved flag. */ grahas: Array<{ /** * Graha name. All nine are placed, the seven classical grahas plus the lunar nodes Rahu and Ketu. */ graha: string; /** * Sidereal Lahiri longitude in degrees. */ longitude: number; /** * Zodiac sign the graha occupies. Identical to the Rashi (D1) chart. */ rashi: string; /** * Bhava the graha falls in under the unequal Sripati cusps. This is the Bhav Chalit placement and the reason the chart exists. */ bhava: number; /** * House the same graha occupies in the whole-sign Rashi chart, counted from the Lagna sign. Returned alongside bhava so the difference is visible without a second request. */ rashiHouse: number; /** * True when bhava and rashiHouse disagree, i.e. the graha changes house between the Rashi chart and the Chalit chart. These are the placements a practitioner opens this chart to check. */ moved: boolean; }>; /** * How many of the nine grahas change house between the Rashi chart and the Chalit chart. Zero is a perfectly normal result and means the two charts agree for this nativity. */ movedCount: number; /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus: 'general' | 'finance'; }; export type BhavChalitRequest = { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Sidereal frame (ayanamsa) the chart is cast in. "lahiri" is Lahiri/Chitrapaksha, the traditional Vedic standard used by most software, and is the default. "raman" is the B.V. Raman ayanamsa from Hindu Predictive Astrology, about 1.45 degrees below Lahiri. "kp-newcomb" and "kp-old" are the two Krishnamurti Paddhati frames. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. The frame rotates the whole zodiac, so a graha sitting within 1.45 degrees of a boundary can change rashi or nakshatra when you switch: pick the one your reference software uses and keep it. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; }; /** * Heliacal rising and setting status of the six visible grahas. */ export type HeliacalResponse = { /** * Local calendar date the verdicts were read for, echoed from the request. */ date: string; /** * One entry per visible graha, in classical order. A graha is omitted only when no horizon crossing exists for it at this latitude on this day. */ grahas: Array<{ /** * Graha name. Only the six with a visible body appear: Moon, Mars, Mercury, Jupiter, Venus and Saturn. The Sun cannot be lost in his own glare, and Rahu and Ketu are computed points with nothing to see. */ graha: string; /** * Whether the graha clears the Sun glare on this day. False is the state a practitioner calls asta or combust, during which classical muhurta withholds auspicious ceremonies, most strictly marriage while Jupiter or Venus is invisible. */ visible: boolean; /** * Horizon this graha is currently judged at. West means it sets after the Sun and is an evening object, east that it rises before him and is a morning one. */ horizon: 'east' | 'west'; /** * Separation from the Sun in degrees of TIME (kalamsa), measured along the equator between the two bodies horizon crossings. This is the quantity Surya Siddhanta actually compares against the limit, and it is not the same as the difference of ecliptic longitudes: the two diverge by roughly 3 degrees at Mumbai and by more than 15 further north, because it accounts for the angle the ecliptic makes with the local horizon. */ timeDegrees: number; /** * The limit in degrees of time this graha must clear to be seen, per Surya Siddhanta ch. IX vv.6-8 and ch. X.1: Moon 12, Jupiter 11, Saturn 15, Mars 17, Venus 10 or 8, Mercury 14 or 12. Larger means the graha is fainter and needs more distance from the Sun. */ kalamsa: number; /** * Whether the graha is retrograde, which for Mercury and Venus tightens the limit (Venus 10 to 8, Mercury 14 to 12). Retrograde puts them near inferior conjunction where they are far closer to Earth, so the larger brighter disk survives closer to the Sun. */ retrograde: boolean; /** * Plain angular separation of the two ecliptic longitudes, in degrees. Returned beside timeDegrees so the two measures can be compared: this is what a combustion flag on a birth chart uses, and the gap between them is precisely what a location-aware heliacal calculation adds. */ longitudeSeparation: number; /** * The event that produced the current state, or null when none falls inside the search horizon (up to about one synodic period, so Mars can legitimately have none). */ lastEvent: { /** * Udaya is heliacal rising, the graha re-emerging from the Sun rays and becoming visible again. Asta (also called lopa, moudhya or moudyami) is heliacal setting, the graha disappearing into them. Stable Sanskrit keys, never translated. */ type: 'udaya' | 'asta'; /** * Horizon the event happens at. East means it is read before sunrise, so the graha is a morning object; west means after sunset, an evening object. A graha crosses to the other horizon as it passes the Sun, which is why an asta and the udaya that follows it are usually on opposite horizons. */ horizon: 'east' | 'west'; /** * Local civil datetime of the event (YYYY-MM-DDTHH:MM:SS), being the moment the graha itself crosses the horizon on the day its verdict changes. That instant, rather than sunrise or sunset, is what published Asta tables print. */ datetime: string; /** * Separation from the Sun in degrees of time on the event day, measured the way the classical rule requires. Sits just either side of kalamsa, since that crossing is what defines the event. */ timeDegrees: number; /** * The limit that was crossed. Can differ from the current reading limit for Mercury and Venus, whose limit tightens when they are retrograde, so an asta entered while retrograde may be left at a different threshold. */ kalamsa: number; } | null; /** * The event that will end the current state, or null when none falls inside the search horizon. For an invisible graha this is the udaya a practitioner is waiting for, so it answers when Guru Asta or Shukra Asta lifts. */ nextEvent: { /** * Udaya is heliacal rising, the graha re-emerging from the Sun rays and becoming visible again. Asta (also called lopa, moudhya or moudyami) is heliacal setting, the graha disappearing into them. Stable Sanskrit keys, never translated. */ type: 'udaya' | 'asta'; /** * Horizon the event happens at. East means it is read before sunrise, so the graha is a morning object; west means after sunset, an evening object. A graha crosses to the other horizon as it passes the Sun, which is why an asta and the udaya that follows it are usually on opposite horizons. */ horizon: 'east' | 'west'; /** * Local civil datetime of the event (YYYY-MM-DDTHH:MM:SS), being the moment the graha itself crosses the horizon on the day its verdict changes. That instant, rather than sunrise or sunset, is what published Asta tables print. */ datetime: string; /** * Separation from the Sun in degrees of time on the event day, measured the way the classical rule requires. Sits just either side of kalamsa, since that crossing is what defines the event. */ timeDegrees: number; /** * The limit that was crossed. Can differ from the current reading limit for Mercury and Venus, whose limit tightens when they are retrograde, so an asta entered while retrograde may be left at a different threshold. */ kalamsa: number; } | null; }>; }; export type HeliacalRequest = { /** * Local calendar date to judge, in YYYY-MM-DD format. There is deliberately no time field: heliacal visibility is a once-a-day verdict read at that day sunrise or sunset, so a clock time could only pick a different day. */ date: string; /** * Observer latitude in decimal degrees, restricted to -60 to 60. Visibility depends on the observer, unlike the longitude orb every chart API reports, because the angle the ecliptic makes with the horizon decides how long a graha lingers after the Sun. Beyond this band the classical rule stops describing solar glare and starts describing polar horizon geometry, so it is declined rather than answered wrongly. */ latitude: number; /** * Observer longitude in decimal degrees. Sets local sunrise and sunset, which are the instants the verdict is read at. Example: Mumbai 72.8777, Delhi 77.2090, London -0.1278. */ longitude: number; /** * Timezone: IANA name (e.g. "Asia/Kolkata", "Europe/London") OR decimal hours from UTC. Fixes which local day the date refers to, and every datetime in the response is returned in it. Defaults to 5.5. */ timezone?: number | string; }; export type BasicCard = { /** * Unique card identifier in kebab-case, with no leading article on Major Arcana (e.g. fool, star, ace-of-cups, queen-of-swords). This is the canonical form, whatever spelling was requested. */ id: string; /** * Display name of the tarot card as it appears in the Rider-Waite-Smith tradition. */ name: string; /** * Whether this card belongs to the Major Arcana (22 trump cards representing major life themes) or Minor Arcana (56 suit cards for daily situations). */ arcana: 'major' | 'minor'; /** * Suit of the card (Minor Arcana only). Cups=emotions, Wands=creativity, Swords=intellect, Pentacles=material. Null for Major Arcana cards. */ suit?: 'cups' | 'wands' | 'swords' | 'pentacles'; /** * Card number within its arcana. Major Arcana: 0 (Fool) through 21 (World). Minor Arcana: 1 (Ace) through 14 (King). */ number: number; /** * URL to the tarot card artwork image in the Rider-Waite-Smith style. */ imageUrl: string; }; export type Card = { /** * Unique card identifier in kebab-case, with no leading article on Major Arcana (e.g. fool, star, ace-of-cups, queen-of-swords). This is the canonical form, whatever spelling was requested. */ id: string; /** * Display name of the tarot card as it appears in the Rider-Waite-Smith tradition. */ name: string; /** * Whether this card belongs to the Major Arcana (22 trump cards representing major life themes) or Minor Arcana (56 suit cards for daily situations). */ arcana: 'major' | 'minor'; /** * Suit of the card (Minor Arcana only). Cups=emotions, Wands=creativity, Swords=intellect, Pentacles=material. Null for Major Arcana cards. */ suit?: 'cups' | 'wands' | 'swords' | 'pentacles'; /** * Card number within its arcana. Major Arcana: 0 (Fool) through 21 (World). Minor Arcana: 1 (Ace) through 14 (King). */ number: number; /** * Keywords for both upright and reversed orientations of this tarot card, useful for quick divination reference. */ keywords: { /** * Key themes when the card is drawn upright. Used for quick tarot reference and reading summaries. */ upright: Array; /** * Key themes when the card is drawn reversed (inverted). Reversed meanings often indicate blocked or internalized energy. */ reversed: Array; }; /** * Complete upright interpretation including description, keywords, and guidance across love, career, finances, health, and spirituality domains. */ upright: { /** * Key themes and concepts for this card in the given orientation (upright or reversed). Used for quick tarot reference and divination summaries. */ keywords: Array; /** * Full narrative interpretation of the card in this orientation. Covers symbolism, life lessons, and guidance for the querent. */ description: string; /** * Love and relationship interpretation for this orientation. Covers romantic partnerships, dating, emotional connections, and matters of the heart. */ love?: string; /** * Career and professional interpretation for this orientation. Covers workplace dynamics, job transitions, ambition, and vocational purpose. */ career?: string; /** * Financial interpretation for this orientation. Covers money management, investments, material prosperity, and abundance mindset. */ finances?: string; /** * Health and wellbeing interpretation for this orientation. Covers physical vitality, mental health, energy levels, and self-care guidance. */ health?: string; /** * Spiritual interpretation for this orientation. Covers personal growth, inner wisdom, soul purpose, and metaphysical development. */ spirituality?: string; }; /** * Complete reversed (inverted) interpretation including description, keywords, and guidance across love, career, finances, health, and spirituality domains. Reversed cards carry modified or blocked energy. */ reversed: { /** * Key themes and concepts for this card in the given orientation (upright or reversed). Used for quick tarot reference and divination summaries. */ keywords: Array; /** * Full narrative interpretation of the card in this orientation. Covers symbolism, life lessons, and guidance for the querent. */ description: string; /** * Love and relationship interpretation for this orientation. Covers romantic partnerships, dating, emotional connections, and matters of the heart. */ love?: string; /** * Career and professional interpretation for this orientation. Covers workplace dynamics, job transitions, ambition, and vocational purpose. */ career?: string; /** * Financial interpretation for this orientation. Covers money management, investments, material prosperity, and abundance mindset. */ finances?: string; /** * Health and wellbeing interpretation for this orientation. Covers physical vitality, mental health, energy levels, and self-care guidance. */ health?: string; /** * Spiritual interpretation for this orientation. Covers personal growth, inner wisdom, soul purpose, and metaphysical development. */ spirituality?: string; }; /** * URL to the tarot card artwork image in the Rider-Waite-Smith style. */ imageUrl: string; }; export type DrawnCard = { /** * Unique card identifier in kebab-case (e.g. the-fool, ace-of-cups). */ id: string; /** * Display name of the tarot card. */ name: string; /** * Whether this card belongs to the Major Arcana (22 trump cards, major life themes) or Minor Arcana (56 suit cards, daily situations). */ arcana: 'major' | 'minor'; /** * Suit of the card (Minor Arcana only). Cups=emotions, Wands=creativity, Swords=intellect, Pentacles=material. Null for Major Arcana cards. */ suit?: 'cups' | 'wands' | 'swords' | 'pentacles'; /** * Card number within its arcana. Major Arcana: 0 (Fool) through 21 (World). Minor Arcana: 1 (Ace) through 14 (King). Null when not applicable. */ number?: number; /** * Position index of this card in the draw sequence (1-based). Useful for mapping cards to spread positions. */ position: number; /** * True if the card was drawn reversed (upside down). Reversed cards carry modified or blocked energy compared to upright position. */ reversed: boolean; /** * Key themes and concepts associated with this card in its current orientation (upright or reversed). */ keywords: Array; /** * Full interpretation of this card in its current orientation, providing detailed divination guidance. */ meaning: string; /** * Love and relationship interpretation for the drawn orientation. Covers romantic partnerships, dating, emotional connections, and matters of the heart. */ love?: string; /** * Career and professional interpretation for the drawn orientation. Covers workplace dynamics, job transitions, ambition, and vocational purpose. */ career?: string; /** * Financial interpretation for the drawn orientation. Covers money management, investments, material prosperity, and abundance mindset. */ finances?: string; /** * Health and wellbeing interpretation for the drawn orientation. Covers physical vitality, mental health, energy levels, and self-care guidance. */ health?: string; /** * Spiritual interpretation for the drawn orientation. Covers personal growth, inner wisdom, soul purpose, and metaphysical development. */ spirituality?: string; /** * URL to the tarot card artwork image. */ imageUrl: string; }; export type ChangingLine = { /** * Line position (1-6, bottom to top). In I-Ching, each hexagram has six lines (yao) read from bottom upward. */ position: number; /** * The oracle statement for this line. It applies when this specific line comes up changing (old yin or old yang) in a casting, and it speaks in the concrete imagery of the tradition. */ text: string; /** * What the line statement asks of the querent, read from its position in the hexagram (1 is the hidden beginning, 3 is the exposed threshold, 5 is the ruling line, 6 is past the peak) and from whether the line is yin or yang. This is the meaning behind the image, so a consuming agent does not have to invent one. */ meaning?: string; }; export type BasicHexagram = { /** * Hexagram number in King Wen sequence (1-64). */ number: number; /** * Unicode hexagram symbol for display. */ symbol: string; /** * Original Chinese name of the hexagram. */ chinese: string; /** * English translation of the hexagram name. */ english: string; /** * Pinyin romanization of the Chinese name with tone marks. */ pinyin: string; /** * Upper trigram (lines 4-6). One of 8 trigrams: Heaven, Earth, Thunder, Wind, Water, Fire, Mountain, Lake. */ upperTrigram: string; /** * Lower trigram (lines 1-3). Combines with upper trigram to form the hexagram. */ lowerTrigram: string; }; export type Hexagram = { /** * Hexagram number in the traditional King Wen sequence (1-64), the standard ordering used in I-Ching divination for over 3,000 years. */ number: number; /** * Unicode hexagram symbol (U+4DC0 block) representing all six lines. Use for visual display in I-Ching apps and divination interfaces. */ symbol: string; /** * Original Chinese character name of the hexagram in traditional script. */ chinese: string; /** * English translation of the hexagram name, conveying the core concept and life situation it represents. */ english: string; /** * Pinyin romanization of the Chinese name with tone marks for correct pronunciation. */ pinyin: string; /** * Binary line pattern (6 digits, bottom to top). 1 = yang (solid line), 0 = yin (broken line). Lines 1-3 form the lower trigram, lines 4-6 form the upper trigram. */ binary: string; /** * Upper trigram (lines 4-6). One of 8 trigrams: Heaven, Earth, Thunder, Wind, Water, Fire, Mountain, Lake. */ upperTrigram: string; /** * Lower trigram (lines 1-3). Combines with the upper trigram to form the hexagram and its meaning. */ lowerTrigram: string; /** * The Judgment (Tuan) text, the primary oracle statement of the hexagram offering core guidance and outcome. */ judgment: string; /** * The Image (Xiang) text, symbolic guidance derived from the trigram combination describing the ideal attitude and action. */ image: string; interpretation: Interpretation; /** * Changing line interpretations for all 6 lines */ changingLines: Array; }; export type Interpretation = { /** * General life situation interpretation of this hexagram. */ general: string; /** * Love and relationship guidance from this hexagram. */ love: string; /** * Career and professional life interpretation. */ career: string; /** * Decision-making guidance for whether to act, wait, retreat, or advance based on this hexagram. */ decision: string; /** * Practical wisdom and actionable advice from this hexagram for daily life application. */ advice: string; }; export type BasicTrigram = { /** * Trigram number (1-8) */ number: number; /** * Unicode trigram symbol */ symbol: string; /** * Chinese name */ chinese: string; /** * English name */ english: string; /** * Pinyin romanization */ pinyin: string; /** * Binary representation (1=Yang solid, 0=Yin broken) */ binary: string; /** * Core attribute/quality */ attribute: string; }; export type Trigram = { /** * Stable identifier for the trigram, 1 to 8. This is our lookup key, not a canonical sequence: the tradition has several orderings (King Wen, Fu Xi, Earlier and Later Heaven) and they disagree, so do not read ranking or precedence into it. */ number: number; /** * Unicode trigram symbol (three lines) for visual display in I-Ching interfaces and Bagua diagrams. */ symbol: string; /** * Original Chinese character name of the trigram in traditional script. */ chinese: string; /** * English name representing the natural force or element this trigram embodies. */ english: string; /** * Pinyin romanization of the Chinese name with tone marks for correct pronunciation. */ pinyin: string; /** * Three-digit binary representation of the trigram lines (bottom to top). 1 = yang (solid), 0 = yin (broken). */ binary: string; /** * Five element (Wu Xing) correspondence: Metal, Wood, Water, Fire, or Earth. Used in Chinese metaphysics and feng shui analysis. */ element: string; /** * Core attribute or quality this trigram represents in I-Ching philosophy (e.g., Creative, Receptive, Arousing). */ attribute: string; /** * Family archetype in the Bagua system. Each trigram corresponds to a family role (Father, Mother, First Son, First Daughter, etc.). */ familyMember: string; /** * Compass direction in the King Wen (Later Heaven) Bagua arrangement. Used in feng shui spatial analysis. */ direction: string; /** * Body part associated with this trigram in traditional Chinese medicine and I-Ching body mapping. */ bodyPart: string; /** * Animal symbol associated with this trigram in classical I-Ching imagery and divination. */ animal: string; /** * Season or time period associated with this trigram in the annual cycle of Chinese cosmology. */ season: string; /** * Energetic quality describing the dynamic nature of this trigram (e.g., Strong, Devoted, Joyous, Gentle). */ quality: string; /** * Concise interpretation of the trigram covering its symbolic meaning, key associations, and guidance for understanding hexagrams containing this trigram. */ meaning: string; }; export type BasicDreamSymbol = { /** * Unique symbol identifier in kebab-case. */ id: string; /** * Display name of the dream symbol. */ name: string; /** * Starting letter for alphabetical filtering. */ letter: string; }; export type DreamSymbol = { /** * Unique symbol identifier in kebab-case. Use this to fetch full interpretation via /symbols/{id}. */ id: string; /** * Display name of the dream symbol. */ name: string; /** * Starting letter (a-z) for alphabetical dream dictionary navigation. */ letter: string; /** * Full psychological dream interpretation explaining the subconscious symbolism, emotional significance, and waking-life connections of this dream symbol. */ meaning: string; }; export type GetFieldLabelsData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/languages/field-labels'; }; export type GetFieldLabelsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetFieldLabelsError = GetFieldLabelsErrors[keyof GetFieldLabelsErrors]; export type GetFieldLabelsResponses = { /** * Form labels resolved for the requested language */ 200: { /** * Language these labels resolved to. Echoes the `lang` query parameter, or `en` when it is omitted. */ lang: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Label per request field or parameter name. Keys are the wire names used in request bodies and query parameters, such as `birthDate`, `timezone` or `houseSystem`. */ fields: { [key: string]: string; }; /** * Label per selectable option, keyed `{fieldName}.{value}` so the same value can read differently under different fields. For example `nodeType.mean` and `houseSystem.whole-sign`. Split on the first dot: the field name is before it, and everything after it is the value you send back unchanged. */ enums: { [key: string]: string; }; }; }; export type GetFieldLabelsResponse = GetFieldLabelsResponses[keyof GetFieldLabelsResponses]; export type ListZodiacSignsData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/signs'; }; export type ListZodiacSignsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListZodiacSignsError = ListZodiacSignsErrors[keyof ListZodiacSignsErrors]; export type ListZodiacSignsResponses = { /** * All 12 tropical zodiac signs with names, symbols, elements, date ranges, and descriptions. */ 200: Array<{ /** * Lowercase sign identifier (e.g., aries, taurus, gemini). */ id: string; /** * Display name of the zodiac sign. */ name: string; /** * Unicode zodiac symbol for this sign. */ symbol?: string; /** * Elemental classification: fire, earth, air, or water. Always one of these four English literals, whatever the lang parameter says, so it stays safe to compare against in code. Use elementLocalized for anything a reader sees. */ element: 'fire' | 'earth' | 'air' | 'water'; /** * Element name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ elementLocalized?: string; /** * Tropical zodiac date range for this sign. */ dates: { /** * Start date of this sign in the tropical zodiac. */ start: string; /** * End date of this sign in the tropical zodiac. */ end: string; }; /** * Brief overview of this zodiac sign personality and themes. */ description: string; }>; }; export type ListZodiacSignsResponse = ListZodiacSignsResponses[keyof ListZodiacSignsResponses]; export type GetZodiacSignData = { body?: never; path: { /** * Sign ID (lowercase, e.g., aries, taurus) or display name (case-insensitive, e.g., Aries, TAURUS). */ id: string; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/signs/{id}'; }; export type GetZodiacSignErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Zodiac sign not found */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetZodiacSignError = GetZodiacSignErrors[keyof GetZodiacSignErrors]; export type GetZodiacSignResponses = { /** * Successfully retrieved zodiac sign */ 200: { /** * Lowercase sign identifier. */ id: string; /** * Display name of the zodiac sign. */ name: string; /** * Unicode zodiac symbol. */ symbol?: string; /** * Symbol name or mascot associated with this sign. */ symbolName: string; /** * Elemental classification: fire, earth, air, or water. Determines temperament and compatibility group. Always one of these four English literals, whatever the lang parameter says, so it stays safe to compare against in code. Use elementLocalized for anything a reader sees. */ element: 'fire' | 'earth' | 'air' | 'water'; /** * Element name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ elementLocalized?: string; /** * Quality/modality: cardinal (initiating), fixed (sustaining), or mutable (adapting). Always one of these three English literals, whatever the lang parameter says, so it stays safe to compare against in code. Use modalityLocalized for anything a reader sees. */ modality: 'cardinal' | 'fixed' | 'mutable'; /** * Modality name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ modalityLocalized?: string; /** * Traditional ruling planet that governs this sign. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use rulingPlanetLocalized for anything a reader sees. */ rulingPlanet: string; /** * Ruling planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ rulingPlanetLocalized?: string; /** * Tropical zodiac date range for this sign. */ dates: { /** * Start date of this sign season. */ start: string; /** * End date of this sign season. */ end: string; }; /** * Key personality traits and descriptive words for this sign. */ keywords: Array; /** * Sign description in short and long form. */ description: { /** * Brief 1-2 sentence personality overview. */ short: string; /** * Detailed multi-paragraph sign profile with personality analysis. */ long: string; }; /** * Notable people born under this zodiac sign. */ famous?: Array; /** * Key strengths and lovable qualities of this sign. */ strengths?: Array; /** * Signature motto or tagline for this sign. */ motto?: string; /** * Greatest gifts and natural talents of this sign. */ gifts?: string; /** * Greatest challenges and growth areas for this sign. */ challenges?: string; /** * Secret weapon or superpower of this sign. */ weapon?: string; /** * Most compatible zodiac signs for this sign. Trine partners (same element, 120 degrees apart) listed first, followed by a sextile partner (complementary element, 60 degrees apart). Use for compatibility widgets, dating app onboarding, sign profile cards, and zodiac matchmaking. */ compatibleSigns: Array; }; }; export type GetZodiacSignResponse = GetZodiacSignResponses[keyof GetZodiacSignResponses]; export type ListPlanetMeaningsData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/planet-meanings'; }; export type ListPlanetMeaningsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListPlanetMeaningsError = ListPlanetMeaningsErrors[keyof ListPlanetMeaningsErrors]; export type ListPlanetMeaningsResponses = { /** * All 14 astrological bodies with names, symbols, taglines, categories, and brief descriptions. */ 200: Array<{ /** * Lowercase planet identifier (e.g., sun, moon, mercury). */ id: string; /** * Display name of the planet. */ name: string; /** * Unicode astronomical symbol for this planet. */ symbol: string; /** * Short tagline summarizing this planet in astrology. */ tagline: string; /** * Planet classification: personal (Sun-Mars), social (Jupiter-Saturn), or generational (Uranus-Pluto). */ category?: string; /** * Zodiac sign this planet rules. The sign where the planet operates most naturally. Absent for the lunar nodes, Chiron, and Black Moon Lilith. */ rulership?: string; /** * Brief overview of the planet and its astrological significance. */ description: string; }>; }; export type ListPlanetMeaningsResponse = ListPlanetMeaningsResponses[keyof ListPlanetMeaningsResponses]; export type GetPlanetMeaningData = { body?: never; path: { /** * Planet ID (lowercase, e.g., sun, moon, mercury) or display name (case-insensitive, e.g., Sun, MOON). Spaces, hyphens and underscores are interchangeable, so the two lunar nodes answer to north-node and south-node as well as to their ids north node and south node, and Black Moon Lilith answers to black-moon-lilith as well as to lilith. */ id: string; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/planet-meanings/{id}'; }; export type GetPlanetMeaningErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Planet not found */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetPlanetMeaningError = GetPlanetMeaningErrors[keyof GetPlanetMeaningErrors]; export type GetPlanetMeaningResponses = { /** * Successfully retrieved planet meaning */ 200: { /** * Lowercase planet identifier. */ id: string; /** * Display name of the planet. */ name: string; /** * Unicode astronomical symbol. */ symbol: string; /** * Short tagline summarizing this planet. */ tagline: string; /** * Planet classification: personal (Sun-Mars), social (Jupiter-Saturn), or generational (Uranus-Pluto). */ category?: string; /** * Traditional planet temperature (Hot, Cold, or Neutral). */ temperature: string; /** * Orbital period around the Sun or zodiac cycle length. */ orbit: string; /** * Whether this planet can appear retrograde. Always false for Sun and Moon. */ retrograde?: boolean; /** * Zodiac sign this planet rules (domicile). Where the planet operates most naturally. Absent for the lunar nodes, Chiron, and Black Moon Lilith. */ rulership?: string; /** * Sign of detriment. Opposite the rulership sign, where the planet struggles. Absent for the lunar nodes, Chiron, and Black Moon Lilith. */ detriment?: string; /** * Sign of exaltation. Where the planet is honored and amplified. Absent for the lunar nodes, Chiron, and Black Moon Lilith. */ exaltation?: string; /** * Deprecated: use exaltation. Retained for backward compatibility, scheduled for removal in v3. Sign of exaltation, carrying the same value as the exaltation field. */ exultation?: string; /** * Sign of fall. Opposite the exaltation sign, where the planet is weakened. Absent for the lunar nodes, Chiron, and Black Moon Lilith. */ fall?: string; /** * Positive and negative keyword associations for this planet. */ keywords: { /** * Positive traits and keywords when this planet is well-aspected. */ positive: Array; /** * Shadow traits when this planet is challenged or afflicted. */ negative: Array; }; /** * Planet description in short and long form. */ description: { /** * Brief 1-2 sentence overview of the planet. */ short: string; /** * Detailed multi-paragraph description of the planet, its symbolism, and astrological meaning. */ long: string; }; }; }; export type GetPlanetMeaningResponse = GetPlanetMeaningResponses[keyof GetPlanetMeaningResponses]; export type GenerateNatalChartData = { body?: NatalChartRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/natal-chart'; }; export type GenerateNatalChartErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateNatalChartError = GenerateNatalChartErrors[keyof GenerateNatalChartErrors]; export type GenerateNatalChartResponses = { /** * Successful natal chart calculation with complete astrological data */ 200: NatalChartResponse; }; export type GenerateNatalChartResponse = GenerateNatalChartResponses[keyof GenerateNatalChartResponses]; export type GetPlanetaryPositionsData = { body?: { /** * Target date for planetary positions in YYYY-MM-DD format. Use current date for transit positions, or any historical/future date for research. Planets move daily, so this date determines their zodiac positions. */ date: string; /** * Time in 24-hour HH:MM:SS format for precise calculations. Moon moves ~13° per day, so time matters for accurate lunar position. Use 12:00:00 (noon) as default if exact time not needed. */ time: string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; /** * Observer latitude in decimal degrees (-90 to 90). While planetary longitudes are geocentric (same worldwide), this is needed for house calculations if extending functionality. For basic ephemeris, use 0 as default. */ latitude: number; /** * Observer longitude in decimal degrees (-180 to 180). Used for precise local time conversion. For basic planetary positions, this has minimal impact but ensures accuracy. */ longitude: number; /** * Decimal hours from UTC (e.g. -5 for EST, 5.5 for IST, 9 for JST, 5.75 for NPT) OR IANA name (e.g. "America/New_York"). IANA resolved to the DST-correct offset for the chart date. */ timezone: number | string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/planets'; }; export type GetPlanetaryPositionsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetPlanetaryPositionsError = GetPlanetaryPositionsErrors[keyof GetPlanetaryPositionsErrors]; export type GetPlanetaryPositionsResponses = { /** * Planetary positions calculated successfully */ 200: { /** * All 14 celestial bodies (10 classical planets, lunar nodes, Chiron, Black Moon Lilith) with zodiac signs, speeds, retrograde status, meanings, and interpretations. */ planets: Array<{ /** * Planet name (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, North Node, South Node, Chiron, Black Moon Lilith). The lunar nodes are the mean node; software using the true node may show node positions up to 1.75 degrees different. */ name: string; /** * Tropical ecliptic longitude in degrees (0-360). */ longitude: number; /** * Ecliptic latitude in degrees. */ latitude: number; /** * Tropical zodiac sign this planet occupies. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; /** * Daily motion in degrees per day. Negative values indicate retrograde. */ speed: number; /** * Whether the planet is in apparent retrograde motion. */ isRetrograde: boolean; /** * Unicode astronomical symbol for this planet. */ symbol?: string; /** * Short tagline summarizing what this planet governs. */ tagline?: string; /** * Brief description of this planet in astrological context. */ description?: string; /** * Key themes and traits associated with this planet. */ keywords?: Array; /** * Planet-in-sign interpretation. How this planet expresses through the zodiac sign it currently occupies. */ interpretation?: { /** * Interpretation of this planet in its current zodiac sign. */ summary: string; /** * General meaning of this planet in astrology. */ planetMeaning: string; /** * How this planet expresses through the current sign. */ signExpression: string; /** * Keywords for this specific planet-in-sign combination. */ keywords: Array; }; }>; }; }; export type GetPlanetaryPositionsResponse = GetPlanetaryPositionsResponses[keyof GetPlanetaryPositionsResponses]; export type GetMonthlyTropicalEphemerisData = { body?: { /** * Year for the monthly ephemeris (1900-2100). Defaults to the current year (UTC). */ year?: number; /** * Month number (1-12) for the ephemeris. Defaults to the current month (UTC). */ month?: number; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/planets/monthly'; }; export type GetMonthlyTropicalEphemerisErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetMonthlyTropicalEphemerisError = GetMonthlyTropicalEphemerisErrors[keyof GetMonthlyTropicalEphemerisErrors]; export type GetMonthlyTropicalEphemerisResponses = { /** * Monthly ephemeris data */ 200: { /** * Year of the ephemeris. Echoes the year that was requested, or the current UTC year when it was omitted. */ year: number; /** * Month of the ephemeris. Echoes the month that was requested, or the current UTC month when it was omitted. */ month: number; /** * Daily planetary position entries for the entire month. */ days: Array<{ /** * Date in YYYY-MM-DD format. */ date: string; /** * Tropical positions of all 14 Western bodies on this date at noon UTC. */ positions: Array<{ /** * Body name, one of the 14 bodies Western astrology reads: Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, North Node, South Node, Chiron, Black Moon Lilith. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use planetLocalized for anything a reader sees. */ planet: string; /** * Body name in the requested language, for display. Present only when lang is set to a language other than English, since in English it would repeat planet exactly. */ planetLocalized?: string; /** * Tropical ecliptic longitude in degrees (0-360), measured from the vernal equinox. This is the Western zodiac, not the sidereal one, so the two differ by the ayanamsa of roughly 24 degrees. */ longitude: number; /** * Tropical zodiac sign the body occupies on this date. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name in the requested language, for display. Present only when lang is set to a language other than English, since in English it would repeat sign exactly. */ signLocalized?: string; /** * Degrees traversed within the current sign (0-30). Useful for precise transit tracking and for printing a position as sign plus degree. */ degreeInSign: number; /** * Whether the body is in apparent retrograde motion on this date. The lunar nodes are always retrograde and Black Moon Lilith is always direct. */ isRetrograde: boolean; }>; }>; }; }; export type GetMonthlyTropicalEphemerisResponse = GetMonthlyTropicalEphemerisResponses[keyof GetMonthlyTropicalEphemerisResponses]; export type GetCurrentMoonPhaseData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Date in YYYY-MM-DD format. Defaults to today if omitted. */ date?: string; /** * Time in 24-hour HH:MM:SS format. Defaults to 12:00:00 (noon). Moon moves ~13 degrees per day so time affects phase precision. */ time?: string; /** * IANA name (e.g. "America/New_York", "Europe/London"), decimal hours (e.g. -5 for EST, 1 for CET), or a fixed UTC offset (e.g. "-05:00"). IANA resolved to the DST-correct offset for the given date. Defaults to 0 (UTC). */ timezone?: string; }; url: '/astrology/moon-phase/current'; }; export type GetCurrentMoonPhaseErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetCurrentMoonPhaseError = GetCurrentMoonPhaseErrors[keyof GetCurrentMoonPhaseErrors]; export type GetCurrentMoonPhaseResponses = { /** * Moon phase calculated successfully */ 200: { /** * Date of this moon phase calculation (YYYY-MM-DD). */ date: string; /** * Current lunar phase name. One of: New Moon, Waxing Crescent Moon, First Quarter Moon, Waxing Gibbous Moon, Full Moon, Waning Gibbous Moon, Last Quarter Moon, Waning Crescent Moon. */ phase: string; /** * Moon illumination percentage (0-100). 0 = New Moon, 100 = Full Moon. */ illumination: number; /** * Lunar age in days since the last New Moon. Full lunation cycle is ~29.53 days. */ age: number; /** * Tropical zodiac sign the Moon currently occupies. */ sign: string; /** * Degree of the Moon within its current zodiac sign (0-29.999). */ degree: number; /** * Distance from Earth to the Moon in kilometers. */ distance: number; /** * Moon phase meaning and astrological interpretation. Includes energy direction, keywords, and guidance for this lunar phase. */ meaning?: { /** * Moon phase display name. */ name: string; /** * Moon phase emoji symbol. */ symbol: string; /** * Astrological interpretation of this lunar phase and its influence on activities, emotions, and intentions. */ description: string; /** * Key themes and activities aligned with this moon phase. */ keywords: Array; /** * Lunar energy direction: waxing (building), waning (releasing), new (beginning), or full (culmination). */ energy: 'waxing' | 'waning' | 'new' | 'full'; /** * Illumination range description for this phase. */ illumination: string; }; }; }; export type GetCurrentMoonPhaseResponse = GetCurrentMoonPhaseResponses[keyof GetCurrentMoonPhaseResponses]; export type GetUpcomingMoonPhasesData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Start date in YYYY-MM-DD format. Defaults to today if omitted. */ startDate?: string; /** * Number of upcoming moon phase transitions to return (1-20). Defaults to 8. */ count?: number; }; url: '/astrology/moon-phase/upcoming'; }; export type GetUpcomingMoonPhasesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetUpcomingMoonPhasesError = GetUpcomingMoonPhasesErrors[keyof GetUpcomingMoonPhasesErrors]; export type GetUpcomingMoonPhasesResponses = { /** * Upcoming moon phases retrieved successfully */ 200: { /** * Upcoming moon phase transition dates in chronological order. */ phases: Array<{ /** * Date of this moon phase transition (YYYY-MM-DD). */ date: string; /** * Lunar phase name (New Moon, First Quarter, Full Moon, Last Quarter). */ phase: string; }>; }; }; export type GetUpcomingMoonPhasesResponse = GetUpcomingMoonPhasesResponses[keyof GetUpcomingMoonPhasesResponses]; export type GetMoonCalendarData = { body?: never; path: { /** * Calendar year (1900-2100). */ year: number; /** * Calendar month (1-12). 1 = January, 12 = December. */ month: number; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/moon-phase/calendar/{year}/{month}'; }; export type GetMoonCalendarErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetMoonCalendarError = GetMoonCalendarErrors[keyof GetMoonCalendarErrors]; export type GetMoonCalendarResponses = { /** * Lunar calendar generated successfully */ 200: { /** * Calendar year for this lunar calendar. */ year: number; /** * Calendar month for this lunar calendar. */ month: number; /** * Month name, localized to the requested language. Saves the caller a lookup table when labelling a calendar heading, since the numeric month alone cannot be rendered without one. */ monthName: string; /** * Daily moon phase and illumination for every day of the month. */ calendar: Array<{ /** * Calendar date (YYYY-MM-DD). */ date: string; /** * Lunar phase name for this date. */ phase: string; /** * Moon illumination percentage (0-100) at noon on this date. */ illumination: number; }>; }; }; export type GetMoonCalendarResponse = GetMoonCalendarResponses[keyof GetMoonCalendarResponses]; export type CalculateSynastryData = { body?: { person1: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; /** * Optional display name for this person. Included in the response for easy identification. */ name?: string; }; person2: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; /** * Optional display name for this person. Included in the response for easy identification. */ name?: string; }; /** * House system for both natal charts. Placidus (default), Whole Sign, Equal, or Koch. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/synastry'; }; export type CalculateSynastryErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateSynastryError = CalculateSynastryErrors[keyof CalculateSynastryErrors]; export type CalculateSynastryResponses = { /** * Synastry calculated successfully with compatibility analysis */ 200: { /** * Person 1 chart highlights: Ascendant, Sun sign, Moon sign, and plotting positions. */ person1: { /** * Display name if provided in the request. */ name?: string; /** * Ascendant position for person 1. Determines first house cusp and outward personality. */ ascendant: { /** * Ascendant (rising sign) of this person. Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Ascendant sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree within the Ascendant sign (0-29.999). */ degree: number; }; /** * Sun sign (zodiac sign) of this person. Core identity and ego expression. Always English, whatever the lang parameter says. Use sunSignLocalized for anything a reader sees. */ sunSign: string; /** * Sun sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ sunSignLocalized?: string; /** * Moon sign of this person. Emotional nature and inner needs. Always English, whatever the lang parameter says. Use moonSignLocalized for anything a reader sees. */ moonSign: string; /** * Moon sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ moonSignLocalized?: string; /** * Planet positions for person 1, enough to render this side of a dual wheel without a second request. Per-planet interpretations are not repeated here; call the natal chart endpoint for an individual reading. */ planets: Array<{ /** * Planet or point name. Matches the names used in interAspects. Always English, whatever the lang parameter says. Use nameLocalized for anything a reader sees. */ name: string; /** * Planet or point name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Ecliptic longitude in degrees (0-360) measured from 0 Aries. This is the value a wheel plots. */ longitude: number; /** * Zodiac sign containing the planet. Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree within the sign (0-29.999). */ degree: number; /** * House this planet occupies in the person 1 chart (1-12). This is the placement in this person OWN chart. For the house overlay a synastry reading is built on, read houseInOtherChart. */ house: number; /** * Which of person 2 houses this planet of person 1 falls into (1-12), counted on that person cusps in the same house system. This is the house OVERLAY, the half of synastry the inter-aspects do not cover: an aspect says two bodies are in relationship, an overlay says which area of the other person life this body lands in. Both people get their own overlay, so person 2 planets carry the reverse reading. */ houseInOtherChart: number; /** * True when the planet is retrograde at this moment. */ isRetrograde: boolean; }>; }; /** * Person 2 chart highlights: Ascendant, Sun sign, Moon sign, and plotting positions. */ person2: { /** * Display name if provided in the request. */ name?: string; /** * Ascendant position for person 2. Determines first house cusp and outward personality. */ ascendant: { /** * Ascendant (rising sign) of this person. Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Ascendant sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree within the Ascendant sign (0-29.999). */ degree: number; }; /** * Sun sign (zodiac sign) of this person. Core identity and ego expression. Always English, whatever the lang parameter says. Use sunSignLocalized for anything a reader sees. */ sunSign: string; /** * Sun sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ sunSignLocalized?: string; /** * Moon sign of this person. Emotional nature and inner needs. Always English, whatever the lang parameter says. Use moonSignLocalized for anything a reader sees. */ moonSign: string; /** * Moon sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ moonSignLocalized?: string; /** * Planet positions for person 2, enough to render this side of a dual wheel without a second request. Per-planet interpretations are not repeated here; call the natal chart endpoint for an individual reading. */ planets: Array<{ /** * Planet or point name. Matches the names used in interAspects. Always English, whatever the lang parameter says. Use nameLocalized for anything a reader sees. */ name: string; /** * Planet or point name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Ecliptic longitude in degrees (0-360) measured from 0 Aries. This is the value a wheel plots. */ longitude: number; /** * Zodiac sign containing the planet. Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree within the sign (0-29.999). */ degree: number; /** * House this planet occupies in the person 2 chart (1-12). This is the placement in this person OWN chart. For the house overlay a synastry reading is built on, read houseInOtherChart. */ house: number; /** * Which of person 1 houses this planet of person 2 falls into (1-12), counted on that person cusps in the same house system. This is the house OVERLAY, the half of synastry the inter-aspects do not cover: an aspect says two bodies are in relationship, an overlay says which area of the other person life this body lands in. Both people get their own overlay, so person 1 planets carry the reverse reading. */ houseInOtherChart: number; /** * True when the planet is retrograde at this moment. */ isRetrograde: boolean; }>; }; /** * Overall compatibility score (0-100). Calculated from the balance of harmonious vs challenging inter-chart aspects weighted by planet importance. */ compatibilityScore: number; /** * All inter-chart (synastry) aspects between person 1 and person 2 planets. Each aspect reveals a specific dynamic in the relationship. */ interAspects: Array<{ /** * Planet from person 1 chart. Always English, whatever the lang parameter says. Use planet1Localized for anything a reader sees. */ planet1: string; /** * Person 1 planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planet1Localized?: string; /** * Planet from person 2 chart. Always English, whatever the lang parameter says. Use planet2Localized for anything a reader sees. */ planet2: string; /** * Person 2 planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planet2Localized?: string; /** * Aspect type (CONJUNCTION, OPPOSITION, TRINE, SQUARE, SEXTILE, etc.). Always English, whatever the lang parameter says. Use typeLocalized for anything a reader sees. */ type: string; /** * Aspect type name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ typeLocalized?: string; /** * Exact angle of this aspect type in degrees. */ angle: number; /** * Distance from exact aspect in degrees. Tighter orb means stronger influence. */ orb: number; /** * Aspect strength percentage (0-100) based on orb tightness. */ strength: number; /** * Aspect nature: harmonious, challenging, or neutral. */ interpretation: string; /** * Aspect meaning with relationship-specific context for this planet pair. */ meaning?: { /** * Aspect display name. */ name: string; /** * Aspect meaning in short and long form. */ description: { /** * Brief aspect description. */ short: string; /** * Detailed aspect description. */ long: string; }; /** * Keywords associated with this aspect type. */ keywords: Array; /** * How this aspect type is characterised in its reference card, in the requested language, exactly like the name, description and keywords beside it. Branch on the aspect-level interpretation field instead, which is always English. */ nature: string; /** * How this specific planetary pair aspect manifests in relationships. */ relationshipContext: string; }; }>; /** * Synastry aspect summary showing the balance of harmonious vs challenging inter-chart connections. */ summary: { /** * Total number of inter-chart aspects found. */ total: number; /** * Count of harmonious aspects (trine, sextile). Natural ease and flow. */ harmonious: number; /** * Count of challenging aspects (square, opposition). Dynamic tension and growth. */ challenging: number; /** * Count of neutral aspects (conjunction). Outcome depends on planets involved. */ neutral: number; /** * Aspect count grouped by type. Shows which aspect patterns dominate the relationship. */ byType: { [key: string]: number; }; }; /** * Relationship analysis with strengths, challenges, and overall assessment. */ analysis: { /** * Overall relationship analysis narrative based on aspect patterns. */ overall: string; /** * Areas where the relationship naturally thrives based on harmonious aspects. */ strengths: Array; /** * Potential friction points and growth opportunities from challenging aspects. */ challenges: Array; }; }; }; export type CalculateSynastryResponse = CalculateSynastryResponses[keyof CalculateSynastryResponses]; export type CalculateHousesData = { body?: { /** * Birth date in YYYY-MM-DD format. Date is critical for house cusp calculations as it determines planetary positions used in some house systems. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is ESSENTIAL for accurate house cusps - even minutes matter. The Ascendant (1st house cusp) changes roughly every 4 minutes. Without accurate time, house placements will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Location determines the local horizon and meridian, which are fundamental to house division. Higher latitudes cause more distortion in time-based systems like Placidus. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Affects local time and horizon calculations for house cusps. */ longitude: number; /** * Decimal hours from UTC (e.g. -5 for EST, 5.5 for IST, 9 for JST) OR IANA name (e.g. "America/New_York"). IANA resolved to the DST-correct offset for the chart date. */ timezone: number | string; /** * House system for dividing ecliptic into 12 houses. Placidus (most popular) uses time, Whole Sign (ancient) uses signs, Equal divides from Ascendant. Use "all" to compare all 4 systems side-by-side for educational purposes. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch' | 'all'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/houses'; }; export type CalculateHousesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateHousesError = CalculateHousesErrors[keyof CalculateHousesErrors]; export type CalculateHousesResponses = { /** * House cusps calculated successfully */ 200: HousesResponse; }; export type CalculateHousesResponse = CalculateHousesResponses[keyof CalculateHousesResponses]; export type CalculateAspectsData = { body?: AspectsRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/aspects'; }; export type CalculateAspectsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateAspectsError = CalculateAspectsErrors[keyof CalculateAspectsErrors]; export type CalculateAspectsResponses = { /** * Aspects calculated successfully */ 200: AspectsResponse; }; export type CalculateAspectsResponse = CalculateAspectsResponses[keyof CalculateAspectsResponses]; export type GetMonthlyTropicalAspectsData = { body?: { /** * Year for the aspect calendar (1900-2100). Defaults to the current year (UTC). */ year?: number; /** * Month number (1-12). Defaults to the current month (UTC). */ month?: number; /** * Timezone offset from UTC in hours. Event dates and times are reported in this zone, which is what makes a published calendar read correctly for its audience. Defaults to 0 (UTC). */ timezone?: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/aspects/monthly'; }; export type GetMonthlyTropicalAspectsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetMonthlyTropicalAspectsError = GetMonthlyTropicalAspectsErrors[keyof GetMonthlyTropicalAspectsErrors]; export type GetMonthlyTropicalAspectsResponses = { /** * Monthly aspect calendar calculated successfully */ 200: { /** * Year of the calendar. Echoes the year requested, or the current UTC year when it was omitted. */ year: number; /** * Month of the calendar. Echoes the month requested, or the current UTC month when it was omitted. */ month: number; /** * Timezone the event dates and times are reported in. Echoes the request. */ timezone: number; /** * Every aspect event in the month, in chronological order across all body pairs. */ events: Array<{ /** * First body forming the aspect. Always canonical English whatever the lang parameter says, so it stays safe to compare against in code. Use planet1Localized for anything a reader sees. */ planet1: string; /** * First body in the requested language. Present only when lang is supplied. */ planet1Localized?: string; /** * Second body forming the aspect. Always canonical English. */ planet2: string; /** * Second body in the requested language. Present only when lang is supplied. */ planet2Localized?: string; /** * Aspect type, canonical English. One of conjunction (0 deg), semi-sextile (30 deg), semi-square (45 deg), sextile (60 deg), square (90 deg), trine (120 deg), sesquiquadrate (135 deg), quincunx (150 deg), opposition (180 deg). */ aspect: string; /** * Aspect name in the requested language. Present only when lang is supplied. */ aspectLocalized?: string; /** * Whether the aspect is harmonious, challenging or neutral. Canonical English, so a calendar can colour or filter on it directly. natureLocalized carries the reader-facing form. */ nature: string; /** * Nature in the requested language. Present only when lang is supplied. */ natureLocalized?: string; /** * Date the aspect is closest to exact, in the requested timezone (YYYY-MM-DD). */ date: string; /** * Time the aspect is closest to exact, in the requested timezone (HH:MM). */ time: string; /** * Combined timestamp of closest approach, in the requested timezone. */ datetime: string; /** * Distance from exact in degrees at the reported instant. Effectively zero for an aspect that perfects inside the month, and larger only where the pair turns before reaching exact. */ orb: number; /** * Actual angular separation between the two bodies in degrees at the reported instant, measured the short way round the circle. */ separation: number; /** * Tropical ecliptic longitude of the first body at the reported instant. */ planet1Longitude: number; /** * Tropical ecliptic longitude of the second body at the reported instant. */ planet2Longitude: number; }>; }; }; export type GetMonthlyTropicalAspectsResponse = GetMonthlyTropicalAspectsResponses[keyof GetMonthlyTropicalAspectsResponses]; export type DetectAspectPatternsData = { body?: AspectPatternsRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Use tighter orbs (Pontopia "optimal" recommendations). Truthy values (true, 1, yes, on; case-insensitive) narrow trine to 5, square to 5, sextile to 4, quincunx to 2. Defaults to false (industry-standard orbs). */ strictOrbs?: string; /** * Comma-separated list of optional bodies to include beyond the classical 10 planets. Valid tokens (case-insensitive): chiron, northNode (also accepts north_node, north-node, northnode). Empty by default. */ include?: string; }; url: '/astrology/aspect-patterns'; }; export type DetectAspectPatternsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type DetectAspectPatternsError = DetectAspectPatternsErrors[keyof DetectAspectPatternsErrors]; export type DetectAspectPatternsResponses = { /** * Aspect patterns detected successfully */ 200: AspectPatternsResponse; }; export type DetectAspectPatternsResponse = DetectAspectPatternsResponses[keyof DetectAspectPatternsResponses]; export type CalculateTransitsData = { body?: TransitsRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/transits'; }; export type CalculateTransitsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateTransitsError = CalculateTransitsErrors[keyof CalculateTransitsErrors]; export type CalculateTransitsResponses = { /** * Transits calculated successfully */ 200: TransitsResponse; }; export type CalculateTransitsResponse = CalculateTransitsResponses[keyof CalculateTransitsResponses]; export type GetMonthlyTropicalTransitsData = { body?: { /** * Year for the monthly transit table (1900-2100). Defaults to the current year (UTC). */ year?: number; /** * Month number (1-12). Defaults to the current month (UTC). */ month?: number; /** * Timezone offset from UTC in hours. Ingress dates and times are reported in this zone, which is what makes a published calendar read correctly for its audience. Defaults to 0 (UTC). */ timezone?: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/transits/monthly'; }; export type GetMonthlyTropicalTransitsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetMonthlyTropicalTransitsError = GetMonthlyTropicalTransitsErrors[keyof GetMonthlyTropicalTransitsErrors]; export type GetMonthlyTropicalTransitsResponses = { /** * Monthly transit table calculated successfully */ 200: { /** * Year of the table. Echoes the year requested, or the current UTC year when it was omitted. */ year: number; /** * Month of the table. Echoes the month requested, or the current UTC month when it was omitted. */ month: number; /** * Timezone the ingress dates and times are reported in. Echoes the request. */ timezone: number; /** * Where every body stands as the month opens, so a calendar can show the run-in as well as the changes. */ startingPositions: Array<{ /** * Body name, canonical English. */ planet: string; /** * Body name in the requested language. */ planetLocalized?: string; /** * Tropical sign the body occupies at the start of the month. */ sign: string; /** * Sign in the requested language. */ signLocalized?: string; /** * Tropical ecliptic longitude in degrees at 00:00 UTC on the first of the month. */ longitude: number; }>; /** * Every sign change in the month, in chronological order across all bodies. Empty only for a month in which nothing changes sign, which cannot happen while the Moon is included. */ transitEvents: Array<{ /** * Body that changes sign during the month. One of the 14 Western bodies. Always canonical English whatever the lang parameter says, so it stays safe to compare against in code. Use planetLocalized for anything a reader sees. */ planet: string; /** * Body name in the requested language. Present only when lang is supplied. */ planetLocalized?: string; /** * Tropical sign the body leaves. Canonical English. */ fromSign: string; /** * Sign left, in the requested language. Present only when lang is supplied. */ fromSignLocalized?: string; /** * Tropical sign the body enters. Canonical English. */ toSign: string; /** * Sign entered, in the requested language. Present only when lang is supplied. */ toSignLocalized?: string; /** * Date of the ingress in the requested timezone (YYYY-MM-DD). */ date: string; /** * Time of the ingress in the requested timezone (HH:MM). */ time: string; /** * Combined ingress timestamp in the requested timezone. */ datetime: string; /** * Whether the body was retrograde at the moment it crossed. A retrograde ingress is the body re-entering a sign it already left, which is why the same body can appear more than once in a month. */ isRetrograde: boolean; }>; }; }; export type GetMonthlyTropicalTransitsResponse = GetMonthlyTropicalTransitsResponses[keyof GetMonthlyTropicalTransitsResponses]; export type CalculateTransitAspectsData = { body?: { /** * Natal chart birth details (date, time, location, timezone). Used to calculate natal planetary positions that transits are compared against. */ natalChart: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; /** * Transit date in YYYY-MM-DD format. Defaults to current date if omitted. Use future dates for predictive transit analysis. */ transitDate?: string; /** * Transit time in HH:MM:SS format. Defaults to 12:00:00 (noon) if omitted. */ transitTime?: string; /** * Filter to specific transiting planets. Omit to include all planets. Useful for focusing on slow-moving outer planet transits (Saturn, Jupiter, Pluto). */ planets?: Array<'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'>; /** * Filter to specific aspect types (conjunction, opposition, trine, square, sextile, etc.). Omit to include all aspect types. */ aspectTypes?: Array<'CONJUNCTION' | 'OPPOSITION' | 'TRINE' | 'SQUARE' | 'SEXTILE' | 'SEMI_SEXTILE' | 'QUINCUNX' | 'SEMI_SQUARE' | 'SESQUIQUADRATE'>; /** * Minimum aspect strength threshold (0-100). Higher values return only tighter, more potent aspects. Useful for filtering out wide-orb aspects. */ minStrength?: number; /** * House system used to divide the natal chart into 12 houses. Every house number in the response is read against these natal cusps, for the natal bodies and the transiting bodies alike. Placidus (default) is time sensitive and the most widely used in Western astrology. Whole Sign assigns one sign per house. Equal divides into 30 degree segments from the Ascendant. Koch emphasizes higher latitudes. Quadrant systems fall back to Whole Sign above the polar circle. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/transit-aspects'; }; export type CalculateTransitAspectsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateTransitAspectsError = CalculateTransitAspectsErrors[keyof CalculateTransitAspectsErrors]; export type CalculateTransitAspectsResponses = { /** * Transit aspects calculated successfully */ 200: { /** * Date and time of the transit calculation. */ transitDate: string; /** * House system actually used for the natal cusps behind every house number in this response. Differs from the requested system only above the polar circle, where quadrant systems fall back to Whole Sign. */ houseSystem: 'placidus' | 'whole-sign' | 'equal' | 'koch'; /** * The twelve NATAL house cusps that every house number in this response is read against, in the house system named by houseSystem. Same shape as the natal-chart houses array, so a bi-wheel can be drawn with real house sectors from this one response instead of pairing it with a second call. */ houses: Array<{ /** * House number (1-12). Each house governs specific life themes in Western astrology. */ number: number; /** * Ecliptic longitude of this house cusp in degrees (0-360). */ longitude: number; /** * Zodiac sign on this house cusp. Colors the themes of this life area. */ sign: string; /** * Degree within the zodiac sign on this cusp (0-29.999). */ degree: number; /** * Zodiac sign name on this cusp in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; }>; /** * The natal Ascendant (rising sign): the eastern horizon at birth, and the left-hand horizon a chart wheel is oriented to. Reported alongside the cusps because the two are not the same longitude in every house system: Whole Sign puts the first cusp at 0 degrees of the rising sign, which can sit most of a sign away from the Ascendant itself. */ ascendant: { /** * Tropical zodiac sign on the natal Ascendant. Always English, whatever the lang parameter says. Use signLocalized for anything a reader sees. */ sign: string; /** * Ascendant sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; /** * Degree within the Ascendant sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the natal Ascendant in degrees (0-360). */ longitude: number; }; /** * Current transiting positions in the tropical zodiac, each placed in the natal house it is passing through. All 14 celestial bodies: the 10 classical planets (Sun through Pluto), the lunar nodes, Chiron, and Black Moon Lilith. */ transitPlanets: Array<{ /** * Body name. One of the 10 classical planets (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto), the lunar nodes (North Node, South Node), Chiron, or Black Moon Lilith (the mean lunar apogee). The nodes follow the request `nodeType`, which defaults to the true (osculating) node; pass "mean" for the smoothed node. The two differ by up to about 1.8 degrees and no other body is affected. */ name: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Tropical ecliptic longitude in degrees (0-360). Primary coordinate for zodiac sign and aspect calculations. */ longitude: number; /** * Ecliptic latitude in degrees. Near zero for most planets, varies for the Moon and Pluto, and reaches up to about 5 degrees for Black Moon Lilith (projected from the inclined mean lunar orbit). */ latitude: number; /** * Tropical zodiac sign this planet occupies. Determined by 30-degree divisions of ecliptic longitude. */ sign: string; /** * Degree within the zodiac sign (0-29.999). Indicates how far the planet has progressed through the sign. */ degree: number; /** * Natal house (1-12) this transiting body is currently passing through, read against the natal house cusps. This is the life area the transit activates, so it is driven by the natal birth time and location rather than by the transit moment. */ house: number; /** * Daily motion in degrees per day. Negative values indicate retrograde motion. */ speed: number; /** * Whether the planet appears to move backward from Earth perspective. Retrograde periods signal review and introspection. */ isRetrograde: boolean; /** * Body name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Zodiac sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; }>; /** * Natal (birth chart) planetary positions used as the baseline for transit aspect comparison, each placed in its natal house. */ natalPlanets: Array<{ /** * Body name. One of the 10 classical planets (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto), the lunar nodes (North Node, South Node), Chiron, or Black Moon Lilith (the mean lunar apogee). The nodes follow the request `nodeType`, which defaults to the true (osculating) node; pass "mean" for the smoothed node. The two differ by up to about 1.8 degrees and no other body is affected. */ name: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Tropical ecliptic longitude in degrees (0-360). Primary coordinate for zodiac sign and aspect calculations. */ longitude: number; /** * Ecliptic latitude in degrees. Near zero for most planets, varies for the Moon and Pluto, and reaches up to about 5 degrees for Black Moon Lilith (projected from the inclined mean lunar orbit). */ latitude: number; /** * Tropical zodiac sign this planet occupies. Determined by 30-degree divisions of ecliptic longitude. */ sign: string; /** * Degree within the zodiac sign (0-29.999). Indicates how far the planet has progressed through the sign. */ degree: number; /** * House placement (1-12). Determined by the selected house system and birth location. */ house: number; /** * Daily motion in degrees per day. Negative values indicate retrograde motion. */ speed: number; /** * Whether the planet appears to move backward from Earth perspective. Retrograde periods signal review and introspection. */ isRetrograde: boolean; /** * Body name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Zodiac sign name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signLocalized?: string; }>; /** * Transit-to-natal aspects with interpretations, strength ratings, and guidance. Each aspect represents a transiting planet forming a geometric angle to a natal planet. */ aspects: Array<{ /** * First planet in the aspect pair. */ planet1: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Second planet in the aspect pair. */ planet2: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Aspect type. Major: conjunction (0), opposition (180), trine (120), square (90), sextile (60). Minor: semi-sextile, quincunx, semi-square, sesquiquadrate. */ type: 'CONJUNCTION' | 'OPPOSITION' | 'TRINE' | 'SQUARE' | 'SEXTILE' | 'SEMI_SEXTILE' | 'QUINCUNX' | 'SEMI_SQUARE' | 'SESQUIQUADRATE'; /** * Exact angular separation that defines this aspect type in degrees. */ angle: number; /** * Deviation from exact aspect in degrees. Tighter orb means stronger influence. */ orb: number; /** * Whether the aspect is applying (planets moving toward exact) or separating (moving apart). Applying aspects grow stronger. */ isApplying: boolean; /** * Aspect strength percentage (0-100). Based on orb tightness relative to the allowed maximum. */ strength: number; /** * Aspect nature. Harmonious (trine, sextile) flows easily. Challenging (square, opposition) creates tension and growth. Neutral (conjunction) blends energies. Always English, whatever the lang parameter says: it is an identifier consumers switch and style on. Use interpretationLocalized for anything a reader sees. */ interpretation: 'harmonious' | 'challenging' | 'neutral'; /** * First planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planet1Localized?: string; /** * Second planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planet2Localized?: string; /** * Aspect type name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ typeLocalized?: string; /** * Rich interpretation of the transit aspect: narrative summary, timing, impact assessment, practical guidance, and keywords. */ transitInterpretation: { /** * Narrative interpretation of this transit aspect and its life impact. */ summary: string; /** * When this transit is most active and how long its influence lasts, localized. The bucket follows the speed of the transiting body: a few hours for the Moon, a few days for the Sun, Mercury, Venus and Mars, one to two weeks for Jupiter, several weeks for Saturn, and an extended period for Uranus, Neptune and Pluto. */ timing: string; /** * Strength and nature of this transit effect — constructive, challenging, or neutral. */ impact: string; /** * Practical advice for working with this transit energy. */ guidance: string; /** * Key themes activated by this transit aspect. */ keywords: Array; }; }>; /** * Statistical summary of all transit aspects. The harmonious-to-challenging ratio reveals the overall transit weather — whether the current period favors ease or demands effort. */ summary: { /** * Total number of transit-to-natal aspects found. */ total: number; /** * Count of harmonious aspects (trine, sextile). These transits bring ease, flow, and opportunity. */ harmonious: number; /** * Count of challenging aspects (square, opposition, semi-square, sesquiquadrate). These transits bring tension, growth pressure, and action. */ challenging: number; /** * Count of neutral aspects (conjunction, minor aspects). Conjunctions blend energies — the outcome depends on the planets involved. */ neutral: number; /** * The tightest aspect by orb. This is the most potent transit currently active — the one most likely to be felt. */ strongest: { /** * First planet in the aspect pair. */ planet1: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Second planet in the aspect pair. */ planet2: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Aspect type. Major: conjunction (0), opposition (180), trine (120), square (90), sextile (60). Minor: semi-sextile, quincunx, semi-square, sesquiquadrate. */ type: 'CONJUNCTION' | 'OPPOSITION' | 'TRINE' | 'SQUARE' | 'SEXTILE' | 'SEMI_SEXTILE' | 'QUINCUNX' | 'SEMI_SQUARE' | 'SESQUIQUADRATE'; /** * Exact angular separation that defines this aspect type in degrees. */ angle: number; /** * Deviation from exact aspect in degrees. Tighter orb means stronger influence. */ orb: number; /** * Whether the aspect is applying (planets moving toward exact) or separating (moving apart). Applying aspects grow stronger. */ isApplying: boolean; /** * Aspect strength percentage (0-100). Based on orb tightness relative to the allowed maximum. */ strength: number; /** * Aspect nature. Harmonious (trine, sextile) flows easily. Challenging (square, opposition) creates tension and growth. Neutral (conjunction) blends energies. Always English, whatever the lang parameter says: it is an identifier consumers switch and style on. Use interpretationLocalized for anything a reader sees. */ interpretation: 'harmonious' | 'challenging' | 'neutral'; /** * First planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planet1Localized?: string; /** * Second planet name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planet2Localized?: string; /** * Aspect type name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ typeLocalized?: string; /** * Rich interpretation of the transit aspect: narrative summary, timing, impact assessment, practical guidance, and keywords. */ transitInterpretation: { /** * Narrative interpretation of this transit aspect and its life impact. */ summary: string; /** * When this transit is most active and how long its influence lasts, localized. The bucket follows the speed of the transiting body: a few hours for the Moon, a few days for the Sun, Mercury, Venus and Mars, one to two weeks for Jupiter, several weeks for Saturn, and an extended period for Uranus, Neptune and Pluto. */ timing: string; /** * Strength and nature of this transit effect — constructive, challenging, or neutral. */ impact: string; /** * Practical advice for working with this transit energy. */ guidance: string; /** * Key themes activated by this transit aspect. */ keywords: Array; }; } | null; /** * Transit aspect counts grouped by aspect type (conjunction, trine, square, opposition, sextile, etc.). Useful for quickly assessing the transit weather. */ byType: { [key: string]: number; }; }; }; }; export type CalculateTransitAspectsResponse = CalculateTransitAspectsResponses[keyof CalculateTransitAspectsResponses]; export type GetMonthlyDeclinationParallelsData = { body?: { /** * Year for the declination calendar (1900-2100). Defaults to the current year (UTC). */ year?: number; /** * Month number (1-12). Defaults to the current month (UTC). */ month?: number; /** * Timezone offset from UTC in hours. Event dates and times are reported in this zone, which is what makes a published calendar read correctly for its audience. Defaults to 0 (UTC). */ timezone?: number | string; /** * How far from exact still counts, in degrees. The traditional orb for a declination contact is tighter than for a zodiacal aspect because declination changes slowly. Defaults to 1.5. */ orb?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/parallels/monthly'; }; export type GetMonthlyDeclinationParallelsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetMonthlyDeclinationParallelsError = GetMonthlyDeclinationParallelsErrors[keyof GetMonthlyDeclinationParallelsErrors]; export type GetMonthlyDeclinationParallelsResponses = { /** * Monthly declination calendar calculated successfully */ 200: { /** * Year of the calendar. Echoes the year requested, or the current UTC year when it was omitted. */ year: number; /** * Month of the calendar. Echoes the month requested, or the current UTC month when it was omitted. */ month: number; /** * Timezone the event dates and times are reported in. Echoes the request. */ timezone: number; /** * Orb in degrees that was applied. Echoes the request. */ orb: number; /** * Every declination contact in the month, in chronological order across all body pairs. */ events: Array<{ /** * First body in the contact. Always canonical English whatever the lang parameter says, so it stays safe to compare against in code. Use planet1Localized for anything a reader sees. */ planet1: string; /** * First body in the requested language. Present only when lang is supplied. */ planet1Localized?: string; /** * Second body in the contact. Always canonical English. */ planet2: string; /** * Second body in the requested language. Present only when lang is supplied. */ planet2Localized?: string; /** * parallel means both bodies stand at the same declination, the same distance north or south of the celestial equator, and reads much like a conjunction. contraparallel means equal and opposite declinations, one as far north as the other is south, and reads much like an opposition. Neither depends on how far apart the two bodies are along the zodiac, which is what makes them worth tracking alongside ordinary aspects. */ type: 'parallel' | 'contraparallel'; /** * Date the contact is closest to exact, in the requested timezone (YYYY-MM-DD). */ date: string; /** * Time the contact is closest to exact, in the requested timezone (HH:MM). */ time: string; /** * Combined timestamp of closest approach, in the requested timezone. */ datetime: string; /** * Distance from exact in degrees at the reported instant. Effectively zero for a contact that perfects inside the month, and larger only where the pair turns before reaching exact. */ orb: number; /** * Geocentric declination of the first body at the reported instant, in degrees. Positive is north of the celestial equator, negative south. */ declination1: number; /** * Geocentric declination of the second body at the reported instant, in degrees. */ declination2: number; }>; }; }; export type GetMonthlyDeclinationParallelsResponse = GetMonthlyDeclinationParallelsResponses[keyof GetMonthlyDeclinationParallelsResponses]; export type GetPlanetaryNodePassagesData = { body?: { /** * Year to scan for node passages (1900-2100). */ year: number; /** * Timezone offset from UTC in hours. Crossing dates and times are reported in this zone. Defaults to 0 (UTC). */ timezone?: number | string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/ecliptic-crossings'; }; export type GetPlanetaryNodePassagesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetPlanetaryNodePassagesError = GetPlanetaryNodePassagesErrors[keyof GetPlanetaryNodePassagesErrors]; export type GetPlanetaryNodePassagesResponses = { /** * Node passages calculated successfully */ 200: { /** * Year that was scanned. Echoes the request. */ year: number; /** * Timezone the dates and times are reported in. Echoes the request. */ timezone: number; /** * Every node passage in the year, in chronological order across all bodies. The fast bodies dominate: a slow body can go years or decades between node passages, so an absent planet means it did not cross that year rather than that it was not checked. */ events: Array<{ /** * Body making the crossing. Always canonical English whatever the lang parameter says, so it stays safe to compare against in code. Use planetLocalized for anything a reader sees. */ planet: string; /** * Body name in the requested language. Present only when lang is supplied. */ planetLocalized?: string; /** * ascending is the crossing from south of the ecliptic to north, at the body north node. descending is the reverse, at its south node. */ direction: 'ascending' | 'descending'; /** * Date of the crossing in the requested timezone (YYYY-MM-DD). */ date: string; /** * Time of the crossing in the requested timezone (HH:MM). */ time: string; /** * Combined crossing timestamp in the requested timezone. */ datetime: string; /** * Tropical ecliptic longitude of the body at the crossing, in degrees. This is the only value in the response that depends on the zodiac frame. */ longitude: number; /** * Tropical sign the body occupies at the crossing. Canonical English. */ sign: string; /** * Sign in the requested language. Present only when lang is supplied. */ signLocalized?: string; }>; }; }; export type GetPlanetaryNodePassagesResponse = GetPlanetaryNodePassagesResponses[keyof GetPlanetaryNodePassagesResponses]; export type GenerateSolarReturnData = { body?: { /** * Original birth date in YYYY-MM-DD format. Used to determine natal Sun longitude for the solar return calculation. */ birthDate: string; /** * Original birth time in 24-hour HH:MM:SS format. Determines exact natal Sun position for annual return timing. */ birthTime: string; /** * Year for which to cast the solar return chart. The chart is erected for the exact moment the transiting Sun conjuncts the natal Sun longitude in this year. */ returnYear: number; /** * Latitude of the solar return location in decimal degrees (-90 to 90). Use current residence or travel location at time of birthday. Solar return charts are location-sensitive. */ latitude: number; /** * Longitude of the solar return location in decimal degrees (-180 to 180). Affects house cusps and Ascendant of the return chart. */ longitude: number; /** * Decimal hours from UTC OR IANA name (e.g. "America/New_York"). IANA resolved to the DST-correct offset for the birthDate. Output datetime is adjusted to this timezone. */ timezone: number | string; /** * House system for the solar return chart. Placidus (default) is most common in Western astrology. Whole Sign, Equal, and Koch also supported. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/solar-return'; }; export type GenerateSolarReturnErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateSolarReturnError = GenerateSolarReturnErrors[keyof GenerateSolarReturnErrors]; export type GenerateSolarReturnResponses = { /** * Solar return chart calculated successfully */ 200: { /** * Original birth date used for natal Sun longitude calculation. */ birthDate: string; /** * Exact solar return moment, when the transiting Sun conjuncts the natal Sun longitude. Adjusted to requested timezone. This is your astrological birthday for the year. */ solarReturnDate: string; /** * Year of this solar return chart. Covers the period from this birthday to the next. */ solarReturnYear: number; /** * Location used for the solar return chart. The Ascendant and house cusps change based on where you are at your birthday, a key technique in relocated solar returns. */ location: { /** * Observer latitude used for Placidus house cusp and Ascendant calculation in the solar return chart. */ latitude: number; /** * Observer longitude used for local sidereal time and Midheaven calculation in the solar return chart. */ longitude: number; /** * Timezone offset from UTC applied to output datetime formatting. */ timezone: number; }; /** * Full natal-style chart erected for the solar return moment. Contains all 14 celestial bodies (10 classical planets, lunar nodes, Chiron, Black Moon Lilith), 12 house cusps, aspects, Ascendant, and Midheaven in the tropical zodiac. */ chart: { /** * Birth details used to generate this chart. */ birthDetails: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * All 14 celestial bodies in the tropical zodiac with house placements: the 10 classical planets (Sun through Pluto), the lunar nodes (North Node, South Node, in the requested `nodeType` convention), Chiron, and Black Moon Lilith. */ planets: Array<{ /** * Body name. One of the 10 classical planets (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto), the lunar nodes (North Node, South Node), Chiron, or Black Moon Lilith (the mean lunar apogee). The nodes follow the request `nodeType`, which defaults to the true (osculating) node; pass "mean" for the smoothed node. The two differ by up to about 1.8 degrees and no other body is affected. */ name: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Tropical ecliptic longitude in degrees (0-360). Primary coordinate for zodiac sign and aspect calculations. */ longitude: number; /** * Ecliptic latitude in degrees. Near zero for most planets, varies for the Moon and Pluto, and reaches up to about 5 degrees for Black Moon Lilith (projected from the inclined mean lunar orbit). */ latitude: number; /** * Tropical zodiac sign this planet occupies. Determined by 30-degree divisions of ecliptic longitude. */ sign: string; /** * Degree within the zodiac sign (0-29.999). Indicates how far the planet has progressed through the sign. */ degree: number; /** * House placement (1-12). Determined by the selected house system and birth location. */ house: number; /** * Daily motion in degrees per day. Negative values indicate retrograde motion. */ speed: number; /** * Whether the planet appears to move backward from Earth perspective. Retrograde periods signal review and introspection. */ isRetrograde: boolean; }>; /** * All 12 house cusps calculated using the selected house system. */ houses: Array<{ /** * House number (1-12). Each house governs specific life themes in Western astrology. */ number: number; /** * Ecliptic longitude of this house cusp in degrees (0-360). */ longitude: number; /** * Zodiac sign on this house cusp. Colors the themes of this life area. */ sign: string; /** * Degree within the zodiac sign on this cusp (0-29.999). */ degree: number; }>; /** * House system used for this chart (placidus, whole-sign, equal, or koch). */ houseSystem: 'placidus' | 'whole-sign' | 'equal' | 'koch'; /** * All planetary aspects found in this chart with orbs, strength, and applying/separating status. */ aspects: Array<{ /** * First planet in the aspect pair. */ planet1: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Second planet in the aspect pair. */ planet2: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Aspect type. Major: conjunction (0), opposition (180), trine (120), square (90), sextile (60). Minor: semi-sextile, quincunx, semi-square, sesquiquadrate. */ type: 'CONJUNCTION' | 'OPPOSITION' | 'TRINE' | 'SQUARE' | 'SEXTILE' | 'SEMI_SEXTILE' | 'QUINCUNX' | 'SEMI_SQUARE' | 'SESQUIQUADRATE'; /** * Exact angular separation that defines this aspect type in degrees. */ angle: number; /** * Deviation from exact aspect in degrees. Tighter orb means stronger influence. */ orb: number; /** * Whether the aspect is applying (planets moving toward exact) or separating (moving apart). Applying aspects grow stronger. */ isApplying: boolean; /** * Aspect strength percentage (0-100). Based on orb tightness relative to the allowed maximum. */ strength: number; /** * Aspect nature. Harmonious (trine, sextile) flows easily. Challenging (square, opposition) creates tension and growth. Neutral (conjunction) blends energies. Always English, whatever the lang parameter says: it is an identifier consumers switch and style on. Use interpretationLocalized for anything a reader sees. */ interpretation: 'harmonious' | 'challenging' | 'neutral'; }>; /** * Part of Fortune (Lot of Fortune). A point derived from the Ascendant and the two luminaries that marks an area of ease, vitality, and material wellbeing in the chart. */ partOfFortune: { /** * Zodiac sign holding the Part of Fortune. */ sign: string; /** * Degree within the Part of Fortune sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Part of Fortune (0-360). */ longitude: number; /** * House containing this point, resolved against the same cusps as `planets[].house` and using the requested house system. Read this field rather than inferring a house from the sign: the two disagree whenever a house spans more than one sign, which is most of the time outside Whole Sign. */ house: number; /** * Chart sect used for the calculation. Day (diurnal) when the Sun is above the horizon, night (nocturnal) when below. Day charts use Ascendant plus Moon minus Sun, night charts use Ascendant plus Sun minus Moon. */ sect: 'day' | 'night'; }; /** * Vertex. The western intersection of the prime vertical with the ecliptic, often read as a point of fated encounters and turning-point relationships. The opposite point is the Anti-Vertex. */ vertex: { /** * Zodiac sign holding the Vertex. */ sign: string; /** * Degree within the Vertex sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Vertex (0-360). */ longitude: number; /** * House containing this point, resolved against the same cusps as `planets[].house` and using the requested house system. Read this field rather than inferring a house from the sign: the two disagree whenever a house spans more than one sign, which is most of the time outside Whole Sign. */ house: number; }; }; /** * Original natal Sun position that the transiting Sun returns to. This conjunction defines the solar return moment. */ natalSunPosition: { /** * Natal Sun ecliptic longitude in degrees (0-360). The transiting Sun returns to this exact degree each year. */ longitude: number; /** * Tropical zodiac sign of the natal Sun (your Sun sign). */ sign: string; /** * Degree within the zodiac sign (0-29.999). The precise position the Sun returns to. */ degree: number; }; /** * Solar return interpretation with annual forecast themes. Solar returns are the primary technique in Western astrology for year-ahead predictions. */ interpretation: { /** * Narrative overview of the solar return year themes and energy. */ summary: string; /** * Explanation of how to use solar return charts for annual forecasting, identifying yearly themes, and timing predictions. */ purpose: string; /** * Key life areas and themes highlighted by this solar return chart. Focus on these for the birthday year. */ keyThemes: Array; }; }; }; export type GenerateSolarReturnResponse = GenerateSolarReturnResponses[keyof GenerateSolarReturnResponses]; export type GenerateLunarReturnData = { body?: { /** * Original birth date in YYYY-MM-DD format. Used to determine natal Moon longitude for the lunar return calculation. */ birthDate: string; /** * Original birth time in 24-hour HH:MM:SS format. Determines exact natal Moon position for monthly return timing. */ birthTime: string; /** * Approximate date near the desired lunar return (YYYY-MM-DD). The Moon returns to its natal position every ~27.3 days, so provide a date within a few days of the expected return. */ returnDate: string; /** * Latitude of the lunar return location in decimal degrees (-90 to 90). Affects the Ascendant and house cusps of the return chart. */ latitude: number; /** * Longitude of the lunar return location in decimal degrees (-180 to 180). Determines local sidereal time for house calculations. */ longitude: number; /** * Decimal hours from UTC OR IANA name (e.g. "America/New_York"). IANA resolved to the DST-correct offset for the birthDate. Output datetime is adjusted to this timezone. */ timezone: number | string; /** * House system for the lunar return chart. Placidus (default), Whole Sign, Equal, or Koch. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/lunar-return'; }; export type GenerateLunarReturnErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateLunarReturnError = GenerateLunarReturnErrors[keyof GenerateLunarReturnErrors]; export type GenerateLunarReturnResponses = { /** * Lunar return chart calculated successfully */ 200: { /** * Original birth date used for natal Moon longitude calculation. */ birthDate: string; /** * Exact lunar return moment, when the transiting Moon conjuncts the natal Moon longitude. Adjusted to requested timezone. Occurs approximately every 27.3 days (one sidereal month). */ lunarReturnDate: string; /** * Location used for the lunar return chart house and Ascendant calculations. */ location: { /** * Observer latitude used for house cusp calculation in the lunar return chart. */ latitude: number; /** * Observer longitude used for local sidereal time and Midheaven in the return chart. */ longitude: number; /** * Timezone offset from UTC applied to output datetime formatting. */ timezone: number; }; /** * Full tropical zodiac chart erected for the lunar return moment. Contains planetary positions, house cusps, aspects, Ascendant, and Midheaven. */ chart: { /** * Birth details used to generate this chart. */ birthDetails: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * All 14 celestial bodies in the tropical zodiac with house placements: the 10 classical planets (Sun through Pluto), the lunar nodes (North Node, South Node, in the requested `nodeType` convention), Chiron, and Black Moon Lilith. */ planets: Array<{ /** * Body name. One of the 10 classical planets (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto), the lunar nodes (North Node, South Node), Chiron, or Black Moon Lilith (the mean lunar apogee). The nodes follow the request `nodeType`, which defaults to the true (osculating) node; pass "mean" for the smoothed node. The two differ by up to about 1.8 degrees and no other body is affected. */ name: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Tropical ecliptic longitude in degrees (0-360). Primary coordinate for zodiac sign and aspect calculations. */ longitude: number; /** * Ecliptic latitude in degrees. Near zero for most planets, varies for the Moon and Pluto, and reaches up to about 5 degrees for Black Moon Lilith (projected from the inclined mean lunar orbit). */ latitude: number; /** * Tropical zodiac sign this planet occupies. Determined by 30-degree divisions of ecliptic longitude. */ sign: string; /** * Degree within the zodiac sign (0-29.999). Indicates how far the planet has progressed through the sign. */ degree: number; /** * House placement (1-12). Determined by the selected house system and birth location. */ house: number; /** * Daily motion in degrees per day. Negative values indicate retrograde motion. */ speed: number; /** * Whether the planet appears to move backward from Earth perspective. Retrograde periods signal review and introspection. */ isRetrograde: boolean; }>; /** * All 12 house cusps calculated using the selected house system. */ houses: Array<{ /** * House number (1-12). Each house governs specific life themes in Western astrology. */ number: number; /** * Ecliptic longitude of this house cusp in degrees (0-360). */ longitude: number; /** * Zodiac sign on this house cusp. Colors the themes of this life area. */ sign: string; /** * Degree within the zodiac sign on this cusp (0-29.999). */ degree: number; }>; /** * House system used for this chart (placidus, whole-sign, equal, or koch). */ houseSystem: 'placidus' | 'whole-sign' | 'equal' | 'koch'; /** * All planetary aspects found in this chart with orbs, strength, and applying/separating status. */ aspects: Array<{ /** * First planet in the aspect pair. */ planet1: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Second planet in the aspect pair. */ planet2: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Aspect type. Major: conjunction (0), opposition (180), trine (120), square (90), sextile (60). Minor: semi-sextile, quincunx, semi-square, sesquiquadrate. */ type: 'CONJUNCTION' | 'OPPOSITION' | 'TRINE' | 'SQUARE' | 'SEXTILE' | 'SEMI_SEXTILE' | 'QUINCUNX' | 'SEMI_SQUARE' | 'SESQUIQUADRATE'; /** * Exact angular separation that defines this aspect type in degrees. */ angle: number; /** * Deviation from exact aspect in degrees. Tighter orb means stronger influence. */ orb: number; /** * Whether the aspect is applying (planets moving toward exact) or separating (moving apart). Applying aspects grow stronger. */ isApplying: boolean; /** * Aspect strength percentage (0-100). Based on orb tightness relative to the allowed maximum. */ strength: number; /** * Aspect nature. Harmonious (trine, sextile) flows easily. Challenging (square, opposition) creates tension and growth. Neutral (conjunction) blends energies. Always English, whatever the lang parameter says: it is an identifier consumers switch and style on. Use interpretationLocalized for anything a reader sees. */ interpretation: 'harmonious' | 'challenging' | 'neutral'; }>; /** * Part of Fortune (Lot of Fortune). A point derived from the Ascendant and the two luminaries that marks an area of ease, vitality, and material wellbeing in the chart. */ partOfFortune: { /** * Zodiac sign holding the Part of Fortune. */ sign: string; /** * Degree within the Part of Fortune sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Part of Fortune (0-360). */ longitude: number; /** * House containing this point, resolved against the same cusps as `planets[].house` and using the requested house system. Read this field rather than inferring a house from the sign: the two disagree whenever a house spans more than one sign, which is most of the time outside Whole Sign. */ house: number; /** * Chart sect used for the calculation. Day (diurnal) when the Sun is above the horizon, night (nocturnal) when below. Day charts use Ascendant plus Moon minus Sun, night charts use Ascendant plus Sun minus Moon. */ sect: 'day' | 'night'; }; /** * Vertex. The western intersection of the prime vertical with the ecliptic, often read as a point of fated encounters and turning-point relationships. The opposite point is the Anti-Vertex. */ vertex: { /** * Zodiac sign holding the Vertex. */ sign: string; /** * Degree within the Vertex sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Vertex (0-360). */ longitude: number; /** * House containing this point, resolved against the same cusps as `planets[].house` and using the requested house system. Read this field rather than inferring a house from the sign: the two disagree whenever a house spans more than one sign, which is most of the time outside Whole Sign. */ house: number; }; }; /** * Original natal Moon position that the transiting Moon returns to. This conjunction defines the lunar return moment. */ natalMoonPosition: { /** * Natal Moon ecliptic longitude in degrees (0-360). The transiting Moon returns to this position each month. */ longitude: number; /** * Tropical zodiac sign of the natal Moon. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; }; /** * Lunar return interpretation with monthly forecast. Lunar returns reveal emotional patterns, domestic focus, and intuitive themes for the upcoming ~27-day cycle. */ interpretation: { /** * Narrative overview of the monthly emotional themes and lunar cycle focus areas. */ summary: string; /** * Explanation of how to use lunar return charts for monthly emotional forecasting and self-care planning. */ purpose: string; /** * Key emotional patterns, domestic themes, and self-care priorities for this lunar month. */ keyThemes: Array; }; }; }; export type GenerateLunarReturnResponse = GenerateLunarReturnResponses[keyof GenerateLunarReturnResponses]; export type GenerateCompositeChartData = { body?: { /** * First person birth details (date, time, location, timezone). */ person1: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; /** * Second person birth details (date, time, location, timezone). */ person2: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; /** * House system for the composite chart. Placidus (default), Whole Sign, Equal, or Koch. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/composite-chart'; }; export type GenerateCompositeChartErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateCompositeChartError = GenerateCompositeChartErrors[keyof GenerateCompositeChartErrors]; export type GenerateCompositeChartResponses = { /** * Composite chart calculated successfully */ 200: { /** * First person birth details. */ person1: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * Second person birth details. */ person2: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * Composite planetary positions calculated as midpoints between both charts. Each planet represents a shared energy in the relationship. */ compositePlanets: Array<{ /** * Body name. One of the 10 classical planets (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto), the lunar nodes (North Node, South Node), Chiron, or Black Moon Lilith (the mean lunar apogee). The nodes follow the request `nodeType`, which defaults to the true (osculating) node; pass "mean" for the smoothed node. The two differ by up to about 1.8 degrees and no other body is affected. */ name: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Tropical ecliptic longitude in degrees (0-360). Primary coordinate for zodiac sign and aspect calculations. */ longitude: number; /** * Ecliptic latitude in degrees. Near zero for most planets, varies for the Moon and Pluto, and reaches up to about 5 degrees for Black Moon Lilith (projected from the inclined mean lunar orbit). */ latitude: number; /** * Tropical zodiac sign this planet occupies. Determined by 30-degree divisions of ecliptic longitude. */ sign: string; /** * Degree within the zodiac sign (0-29.999). Indicates how far the planet has progressed through the sign. */ degree: number; /** * House placement (1-12). Determined by the selected house system and birth location. */ house: number; /** * Daily motion in degrees per day. Negative values indicate retrograde motion. */ speed: number; /** * Whether the planet appears to move backward from Earth perspective. Retrograde periods signal review and introspection. */ isRetrograde: boolean; /** * Composite interpretation for this planet in the relationship chart. */ compositeInterpretation?: { /** * Narrative interpretation of this composite planet placement. */ summary: string; /** * What this planet represents in the context of the relationship. */ relationshipMeaning: string; /** * Key themes associated with this composite placement. */ keywords: Array; }; }>; /** * Composite house cusps, each the midpoint of the two natal cusps. Each house represents shared life areas in the relationship. */ compositeHouses: Array<{ /** * House number (1-12) in the composite chart. */ number: number; /** * Zodiac sign on the composite house cusp. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude in degrees (0-360). */ longitude: number; }>; /** * Composite Ascendant. Represents how the relationship presents itself to the outside world. */ compositeAscendant: { /** * Zodiac sign on the composite Ascendant. */ sign: string; /** * Degree within the sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude in degrees (0-360). */ longitude: number; }; /** * Composite Midheaven (MC). Represents shared goals, public image, and the direction the relationship grows toward. */ compositeMidheaven: { /** * Zodiac sign on the composite Midheaven. */ sign: string; /** * Degree within the sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude in degrees (0-360). */ longitude: number; }; /** * Aspects between composite planets. Reveals the internal dynamics and energy patterns within the relationship. */ aspects: Array<{ /** * First planet in the aspect pair. */ planet1: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Second planet in the aspect pair. */ planet2: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Aspect type. Major: conjunction (0), opposition (180), trine (120), square (90), sextile (60). Minor: semi-sextile, quincunx, semi-square, sesquiquadrate. */ type: 'CONJUNCTION' | 'OPPOSITION' | 'TRINE' | 'SQUARE' | 'SEXTILE' | 'SEMI_SEXTILE' | 'QUINCUNX' | 'SEMI_SQUARE' | 'SESQUIQUADRATE'; /** * Exact angular separation that defines this aspect type in degrees. */ angle: number; /** * Deviation from exact aspect in degrees. Tighter orb means stronger influence. */ orb: number; /** * Whether the aspect is applying (planets moving toward exact) or separating (moving apart). Applying aspects grow stronger. */ isApplying: boolean; /** * Aspect strength percentage (0-100). Based on orb tightness relative to the allowed maximum. */ strength: number; /** * Aspect nature. Harmonious (trine, sextile) flows easily. Challenging (square, opposition) creates tension and growth. Neutral (conjunction) blends energies. Always English, whatever the lang parameter says: it is an identifier consumers switch and style on. Use interpretationLocalized for anything a reader sees. */ interpretation: 'harmonious' | 'challenging' | 'neutral'; }>; /** * Composite chart interpretation with relationship strengths, challenges, and overall assessment. */ interpretation: { /** * Overall relationship interpretation based on composite chart analysis. */ summary: string; /** * Areas where the relationship naturally thrives. */ strengths: Array; /** * Potential friction points and growth opportunities in the relationship. */ challenges: Array; }; }; }; export type GenerateCompositeChartResponse = GenerateCompositeChartResponses[keyof GenerateCompositeChartResponses]; export type CalculateCompatibilityData = { body?: { /** * First person birth details (date, time, location, timezone). Required for calculating natal planetary positions. */ person1: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; /** * Second person birth details. Compared against person1 to evaluate inter-chart aspects and compatibility. */ person2: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/compatibility-score'; }; export type CalculateCompatibilityErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateCompatibilityError = CalculateCompatibilityErrors[keyof CalculateCompatibilityErrors]; export type CalculateCompatibilityResponses = { /** * Compatibility score calculated successfully */ 200: { /** * Overall compatibility score (0-100). Weighted average across romantic, emotional, intellectual, physical, and spiritual categories. */ overallScore: number; /** * Compatibility breakdown by life area. Each category evaluates specific planetary pair interactions that govern that domain. */ categories: { /** * Romantic compatibility score based on Sun-Moon, Venus-Mars, and Sun-Venus inter-aspects. */ romantic: number; /** * Emotional compatibility score based on Moon-Moon and Moon-Venus inter-aspects. */ emotional: number; /** * Intellectual compatibility score based on Mercury-Mercury and Sun-Mercury inter-aspects. */ intellectual: number; /** * Physical compatibility score based on Mars-Mars and Mars-Sun inter-aspects. */ physical: number; /** * Spiritual compatibility score based on Jupiter-Sun and Jupiter-Jupiter inter-aspects. */ spiritual: number; }; /** * Summary of key planetary positions for both people. Includes the four planets most relevant to relationship compatibility. */ persons: { /** * Key planet positions for person 1. Sun, Moon, Venus, and Mars sign placements. */ person1: { /** * Sun sign position. Core identity and ego. */ sun: { /** * Zodiac sign this planet occupies in the tropical zodiac. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; }; /** * Moon sign position. Emotional nature and instincts. */ moon: { /** * Zodiac sign this planet occupies in the tropical zodiac. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; }; /** * Venus sign position. Love language and relationship style. */ venus: { /** * Zodiac sign this planet occupies in the tropical zodiac. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; }; /** * Mars sign position. Passion, desire, and conflict style. */ mars: { /** * Zodiac sign this planet occupies in the tropical zodiac. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; }; }; /** * Key planet positions for person 2. Sun, Moon, Venus, and Mars sign placements. */ person2: { /** * Sun sign position. Core identity and ego. */ sun: { /** * Zodiac sign this planet occupies in the tropical zodiac. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; }; /** * Moon sign position. Emotional nature and instincts. */ moon: { /** * Zodiac sign this planet occupies in the tropical zodiac. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; }; /** * Venus sign position. Love language and relationship style. */ venus: { /** * Zodiac sign this planet occupies in the tropical zodiac. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; }; /** * Mars sign position. Passion, desire, and conflict style. */ mars: { /** * Zodiac sign this planet occupies in the tropical zodiac. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; }; }; }; /** * Sign-by-sign compatibility analysis for the four key relationship planets. Each entry describes how the two signs interact through that planetary lens. */ signCompatibility: { /** * Sun sign compatibility. Reveals core personality dynamic as a couple. */ sun: { /** * Person 1 sign for this planet. */ person1Sign: string; /** * Person 2 sign for this planet. */ person2Sign: string; /** * Narrative analysis of how these two signs interact through this planet. */ description: string; }; /** * Moon sign compatibility. Reveals how you process emotions and nurture each other. */ moon: { /** * Person 1 sign for this planet. */ person1Sign: string; /** * Person 2 sign for this planet. */ person2Sign: string; /** * Narrative analysis of how these two signs interact through this planet. */ description: string; }; /** * Venus sign compatibility. Reveals love languages and what you find beautiful together. */ venus: { /** * Person 1 sign for this planet. */ person1Sign: string; /** * Person 2 sign for this planet. */ person2Sign: string; /** * Narrative analysis of how these two signs interact through this planet. */ description: string; }; /** * Mars sign compatibility. Reveals how you handle passion, conflict, and desire. */ mars: { /** * Person 1 sign for this planet. */ person1Sign: string; /** * Person 2 sign for this planet. */ person2Sign: string; /** * Narrative analysis of how these two signs interact through this planet. */ description: string; }; }; /** * Elemental balance comparison. Shows how fire, earth, air, and water energy is distributed across both charts. */ elementBalance: { /** * Element distribution across person 1 natal planets. */ person1: { /** * Count of planets in fire signs (Aries, Leo, Sagittarius). */ fire: number; /** * Count of planets in earth signs (Taurus, Virgo, Capricorn). */ earth: number; /** * Count of planets in air signs (Gemini, Libra, Aquarius). */ air: number; /** * Count of planets in water signs (Cancer, Scorpio, Pisces). */ water: number; }; /** * Element distribution across person 2 natal planets. */ person2: { /** * Count of planets in fire signs (Aries, Leo, Sagittarius). */ fire: number; /** * Count of planets in earth signs (Taurus, Virgo, Capricorn). */ earth: number; /** * Count of planets in air signs (Gemini, Libra, Aquarius). */ air: number; /** * Count of planets in water signs (Cancer, Scorpio, Pisces). */ water: number; }; /** * Dominant element shared by both charts, or null if dominant elements differ. */ sharedElement: string | null; /** * How the elemental balance between charts shapes the relationship dynamic. */ description: string; }; /** * Relationship archetype based on score pattern, category strengths, and elemental balance. One of eight archetypes: Kindred Spirits, Opposites Attract, The Power Couple, The Nurturers, The Adventurers, Growth Partners, The Balancers, The Mystics. */ archetype: { /** * Relationship archetype label. A headline-friendly label for the dynamic. */ label: string; /** * Narrative description of the relationship archetype and what it means. */ description: string; }; /** * Top relationship strengths based on harmonious inter-chart aspects. Each includes the planet pair, aspect type, and relationship-specific interpretation. */ strengths: Array; /** * Potential friction points based on challenging inter-chart aspects. Each includes specific guidance for navigating the tension. */ challenges: Array; /** * Narrative overview of the relationship compatibility, highlighting the dominant themes. */ summary: string; /** * Detailed compatibility interpretation analyzing the synastry aspect patterns between both charts. */ interpretation: string; /** * Synastry aspect breakdown showing the balance of harmonious, challenging, and neutral inter-chart aspects. */ aspectBreakdown: { /** * Total number of inter-chart aspects found between the two natal charts. */ total: number; /** * Count of harmonious aspects (trine, sextile). These indicate natural ease and flow. */ harmonious: number; /** * Count of challenging aspects (square, opposition). These create dynamic tension and growth. */ challenging: number; /** * Count of neutral aspects (conjunction). Outcome depends on the planets involved. */ neutral: number; }; /** * The most significant inter-chart aspects involving personal planets (Sun through Saturn), sorted by strength. Each includes a relationship-specific interpretation. */ keyAspects: Array<{ /** * First planet in the aspect. */ planet1: string; /** * Second planet in the aspect. */ planet2: string; /** * Aspect type (conjunction, trine, square, etc.). */ type: string; /** * Deviation from exact aspect in degrees. Tighter orb = stronger influence. */ orb: number; /** * Aspect nature. Harmonious flows easily. Challenging creates growth-oriented tension. */ interpretation: 'harmonious' | 'challenging' | 'neutral'; /** * Relationship-specific interpretation of this aspect between the two charts. */ description: string; }>; }; }; export type CalculateCompatibilityResponse = CalculateCompatibilityResponses[keyof CalculateCompatibilityResponses]; export type GetDailyHoroscopeData = { body?: never; path: { /** * Zodiac sign, case-insensitive (e.g., aries, Aries, ARIES all work). */ sign: 'aries' | 'taurus' | 'gemini' | 'cancer' | 'leo' | 'virgo' | 'libra' | 'scorpio' | 'sagittarius' | 'capricorn' | 'aquarius' | 'pisces'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Forecast date in YYYY-MM-DD format. Past and future dates are both supported, for editorial scheduling and backfill. Defaults to the current period in the timezone parameter. */ date?: string; /** * Selects which period counts as current when date is omitted. Defaults to UTC, so the forecast rolls over at 00:00 UTC on 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"). */ timezone?: string; }; url: '/astrology/horoscope/{sign}/daily'; }; export type GetDailyHoroscopeErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetDailyHoroscopeError = GetDailyHoroscopeErrors[keyof GetDailyHoroscopeErrors]; export type GetDailyHoroscopeResponses = { /** * Daily horoscope retrieved successfully */ 200: { /** * Zodiac sign for this horoscope. */ sign: string; /** * Date of this daily horoscope (YYYY-MM-DD). */ date: string; /** * General daily overview based on Moon house activation and planetary transits. Unique per sign based on whole-sign house positions. */ overview: string; /** * Love and relationship forecast. Based on Venus house position relative to this sign, providing unique guidance per sign. */ love: string; /** * Career and professional outlook. Based on Mars house position relative to this sign, with Saturn and Jupiter influences. */ career: string; /** * Health, energy, and wellness guidance for the day. */ health: string; /** * Financial outlook and money-related guidance. */ finance: string; /** * Actionable daily advice based on the dominant transit energy. */ advice: string; /** * Lucky number for the day. */ luckyNumber: number; /** * Lucky color for the day, derived from the sign element. */ luckyColor: string; /** * Most compatible zodiac signs for this sign. Trine partners (same element) followed by a sextile partner (complementary element). Use for compatibility widgets, dating app onboarding, and horoscope cards. */ compatibleSigns: Array; /** * Active planetary transits affecting this sign today, with house activations. Each transit shows the planet, its current sign, and which house it activates for the queried sign. */ activeTransits: Array; /** * Current Moon sign. Changes every 2-3 days, sets the emotional tone for all signs. */ moonSign: string; /** * Current lunar phase (New Moon, Waxing Crescent, First Quarter, Waxing Gibbous, Full Moon, Waning Gibbous, Last Quarter, Waning Crescent). */ moonPhase: string; /** * Overall energy intensity for this sign today (1-10). Higher when more transits activate this sign directly. Useful for content widgets and visual indicators. */ energyRating: number; }; }; export type GetDailyHoroscopeResponse = GetDailyHoroscopeResponses[keyof GetDailyHoroscopeResponses]; export type GetWeeklyHoroscopeData = { body?: never; path: { /** * Zodiac sign, case-insensitive (e.g., aries, Aries, ARIES all work). */ sign: 'aries' | 'taurus' | 'gemini' | 'cancer' | 'leo' | 'virgo' | 'libra' | 'scorpio' | 'sagittarius' | 'capricorn' | 'aquarius' | 'pisces'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Any date inside the target week, in YYYY-MM-DD format. The forecast covers the Monday to Sunday week containing it. Defaults to the current period in the timezone parameter. */ date?: string; /** * Selects which period counts as current when date is omitted. Defaults to UTC, so the forecast rolls over at 00:00 UTC on each Monday. 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"). */ timezone?: string; }; url: '/astrology/horoscope/{sign}/weekly'; }; export type GetWeeklyHoroscopeErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetWeeklyHoroscopeError = GetWeeklyHoroscopeErrors[keyof GetWeeklyHoroscopeErrors]; export type GetWeeklyHoroscopeResponses = { /** * Weekly horoscope retrieved successfully */ 200: { /** * Zodiac sign for this horoscope. */ sign: string; /** * Start date of the forecast week (Monday). */ week: string; /** * Weekly overview highlighting the dominant planetary transits through the sign. */ overview: string; /** * Weekly love and relationship forecast. */ love: string; /** * Weekly career and professional outlook. */ career: string; /** * Weekly health, energy, and wellness guidance. */ health: string; /** * Weekly financial outlook. */ finance: string; /** * Actionable weekly guidance based on transit patterns. */ advice: string; /** * Favorable days this week, based on planetary rulership. */ luckyDays: Array; /** * Lucky numbers for the week. */ luckyNumbers: Array; /** * Most compatible zodiac signs for this sign. Trine partners (same element) followed by a sextile partner (complementary element). */ compatibleSigns: Array; }; }; export type GetWeeklyHoroscopeResponse = GetWeeklyHoroscopeResponses[keyof GetWeeklyHoroscopeResponses]; export type GetMonthlyHoroscopeData = { body?: never; path: { /** * Zodiac sign, case-insensitive (e.g., aries, Aries, ARIES all work). */ sign: 'aries' | 'taurus' | 'gemini' | 'cancer' | 'leo' | 'virgo' | 'libra' | 'scorpio' | 'sagittarius' | 'capricorn' | 'aquarius' | 'pisces'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Any date inside the target month, in YYYY-MM-DD format. The forecast covers the whole calendar month containing it. Defaults to the current period in the timezone parameter. */ date?: string; /** * Selects which period counts as current when date is omitted. Defaults to UTC, so the forecast rolls over at 00:00 UTC on the 1st. 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"). */ timezone?: string; }; url: '/astrology/horoscope/{sign}/monthly'; }; export type GetMonthlyHoroscopeErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetMonthlyHoroscopeError = GetMonthlyHoroscopeErrors[keyof GetMonthlyHoroscopeErrors]; export type GetMonthlyHoroscopeResponses = { /** * Monthly horoscope retrieved successfully */ 200: { /** * Zodiac sign for this horoscope. */ sign: string; /** * Month of this forecast (YYYY-MM). */ month: string; /** * Monthly overview covering the major planetary transits and their impact on the sign. */ overview: string; /** * Monthly love and relationship forecast. */ love: string; /** * Monthly career and professional outlook. */ career: string; /** * Monthly health and wellness guidance. */ health: string; /** * Monthly financial outlook and guidance. */ finance: string; /** * Actionable guidance for the month as a whole, derived from the Mercury house activation for this sign. Distinct from the per-week advice inside weekByWeek: this is the single takeaway for the month. */ advice: string; /** * Week-by-week breakdown with sign-specific focus areas based on transit house positions. */ weekByWeek: Array<{ /** * Week number within the month (1-4). */ week: number; /** * Primary focus area for this week, derived from planetary house activations for this sign. */ focus: string; /** * Specific guidance for this week. */ advice: string; }>; /** * Key astrological dates this month with actual New Moon, Full Moon, and retrograde dates calculated from ephemeris data. */ keyDates: Array<{ /** * Date of the astrological event (YYYY-MM-DD). */ date: string; /** * Astrological event active on this date (lunar phases, retrogrades, sign ingresses). */ event: string; }>; /** * Lucky numbers for the month. */ luckyNumbers: Array; /** * Lucky color for the month. */ luckyColor: string; /** * Most compatible zodiac signs for this sign. Trine partners (same element) followed by a sextile partner (complementary element). */ compatibleSigns: Array; }; }; export type GetMonthlyHoroscopeResponse = GetMonthlyHoroscopeResponses[keyof GetMonthlyHoroscopeResponses]; export type GeneratePlanetaryReturnData = { body?: { /** * Original birth date in YYYY-MM-DD format. Used to determine the natal longitude of the selected planet. */ birthDate: string; /** * Original birth time in 24-hour HH:MM:SS format. Determines exact natal planet position for return timing. */ birthTime: string; /** * Planet for the return calculation. Supports Mercury (~88 days), Venus (~225 days), Mars (~687 days), Jupiter (~12 years), and Saturn (~29 years). Saturn return is a major life milestone in Western astrology. */ planet: 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn'; /** * Approximate date near the expected planetary return (YYYY-MM-DD). Provide a date within the expected return window. The algorithm searches from this starting point. */ approximateDate: string; /** * Latitude of the return location in decimal degrees (-90 to 90). Affects house cusps and Ascendant of the return chart. */ latitude: number; /** * Longitude of the return location in decimal degrees (-180 to 180). */ longitude: number; /** * Decimal hours from UTC OR IANA name (e.g. "America/New_York"). IANA resolved to the DST-correct offset for the birthDate. Output datetime is adjusted to this timezone. */ timezone: number | string; /** * House system for the return chart. Placidus (default), Whole Sign, Equal, or Koch. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/planetary-returns'; }; export type GeneratePlanetaryReturnErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GeneratePlanetaryReturnError = GeneratePlanetaryReturnErrors[keyof GeneratePlanetaryReturnErrors]; export type GeneratePlanetaryReturnResponses = { /** * Planetary return chart calculated successfully */ 200: { /** * Original birth date used for natal planet longitude calculation. */ birthDate: string; /** * Planet whose return was calculated. Each planet has a different orbital period and return significance. */ planet: string; /** * Exact planetary return moment, when the transiting planet conjuncts its natal longitude. Adjusted to requested timezone. Marks the beginning of a new cycle for that planet in your life. */ returnDate: string; /** * Approximate orbital period for this planet. Mercury ~88 days, Venus ~225 days, Mars ~687 days (~1.9 years), Jupiter ~12 years, Saturn ~29 years. */ approximateCycle: string; /** * Location used for the planetary return chart house and Ascendant calculations. */ location: { /** * Observer latitude used for house cusp calculation in the return chart. */ latitude: number; /** * Observer longitude used for Midheaven and local sidereal time. */ longitude: number; /** * Timezone offset from UTC applied to output datetime formatting. */ timezone: number; }; /** * Full tropical zodiac chart erected for the planetary return moment. Contains planetary positions, house cusps, aspects, Ascendant, and Midheaven. */ chart: { /** * Birth details used to generate this chart. */ birthDetails: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * All 14 celestial bodies in the tropical zodiac with house placements: the 10 classical planets (Sun through Pluto), the lunar nodes (North Node, South Node, in the requested `nodeType` convention), Chiron, and Black Moon Lilith. */ planets: Array<{ /** * Body name. One of the 10 classical planets (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto), the lunar nodes (North Node, South Node), Chiron, or Black Moon Lilith (the mean lunar apogee). The nodes follow the request `nodeType`, which defaults to the true (osculating) node; pass "mean" for the smoothed node. The two differ by up to about 1.8 degrees and no other body is affected. */ name: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Tropical ecliptic longitude in degrees (0-360). Primary coordinate for zodiac sign and aspect calculations. */ longitude: number; /** * Ecliptic latitude in degrees. Near zero for most planets, varies for the Moon and Pluto, and reaches up to about 5 degrees for Black Moon Lilith (projected from the inclined mean lunar orbit). */ latitude: number; /** * Tropical zodiac sign this planet occupies. Determined by 30-degree divisions of ecliptic longitude. */ sign: string; /** * Degree within the zodiac sign (0-29.999). Indicates how far the planet has progressed through the sign. */ degree: number; /** * House placement (1-12). Determined by the selected house system and birth location. */ house: number; /** * Daily motion in degrees per day. Negative values indicate retrograde motion. */ speed: number; /** * Whether the planet appears to move backward from Earth perspective. Retrograde periods signal review and introspection. */ isRetrograde: boolean; }>; /** * All 12 house cusps calculated using the selected house system. */ houses: Array<{ /** * House number (1-12). Each house governs specific life themes in Western astrology. */ number: number; /** * Ecliptic longitude of this house cusp in degrees (0-360). */ longitude: number; /** * Zodiac sign on this house cusp. Colors the themes of this life area. */ sign: string; /** * Degree within the zodiac sign on this cusp (0-29.999). */ degree: number; }>; /** * House system used for this chart (placidus, whole-sign, equal, or koch). */ houseSystem: 'placidus' | 'whole-sign' | 'equal' | 'koch'; /** * All planetary aspects found in this chart with orbs, strength, and applying/separating status. */ aspects: Array<{ /** * First planet in the aspect pair. */ planet1: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Second planet in the aspect pair. */ planet2: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Aspect type. Major: conjunction (0), opposition (180), trine (120), square (90), sextile (60). Minor: semi-sextile, quincunx, semi-square, sesquiquadrate. */ type: 'CONJUNCTION' | 'OPPOSITION' | 'TRINE' | 'SQUARE' | 'SEXTILE' | 'SEMI_SEXTILE' | 'QUINCUNX' | 'SEMI_SQUARE' | 'SESQUIQUADRATE'; /** * Exact angular separation that defines this aspect type in degrees. */ angle: number; /** * Deviation from exact aspect in degrees. Tighter orb means stronger influence. */ orb: number; /** * Whether the aspect is applying (planets moving toward exact) or separating (moving apart). Applying aspects grow stronger. */ isApplying: boolean; /** * Aspect strength percentage (0-100). Based on orb tightness relative to the allowed maximum. */ strength: number; /** * Aspect nature. Harmonious (trine, sextile) flows easily. Challenging (square, opposition) creates tension and growth. Neutral (conjunction) blends energies. Always English, whatever the lang parameter says: it is an identifier consumers switch and style on. Use interpretationLocalized for anything a reader sees. */ interpretation: 'harmonious' | 'challenging' | 'neutral'; }>; /** * Part of Fortune (Lot of Fortune). A point derived from the Ascendant and the two luminaries that marks an area of ease, vitality, and material wellbeing in the chart. */ partOfFortune: { /** * Zodiac sign holding the Part of Fortune. */ sign: string; /** * Degree within the Part of Fortune sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Part of Fortune (0-360). */ longitude: number; /** * House containing this point, resolved against the same cusps as `planets[].house` and using the requested house system. Read this field rather than inferring a house from the sign: the two disagree whenever a house spans more than one sign, which is most of the time outside Whole Sign. */ house: number; /** * Chart sect used for the calculation. Day (diurnal) when the Sun is above the horizon, night (nocturnal) when below. Day charts use Ascendant plus Moon minus Sun, night charts use Ascendant plus Sun minus Moon. */ sect: 'day' | 'night'; }; /** * Vertex. The western intersection of the prime vertical with the ecliptic, often read as a point of fated encounters and turning-point relationships. The opposite point is the Anti-Vertex. */ vertex: { /** * Zodiac sign holding the Vertex. */ sign: string; /** * Degree within the Vertex sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Vertex (0-360). */ longitude: number; /** * House containing this point, resolved against the same cusps as `planets[].house` and using the requested house system. Read this field rather than inferring a house from the sign: the two disagree whenever a house spans more than one sign, which is most of the time outside Whole Sign. */ house: number; }; }; /** * Original natal planet position that defines the return. The transiting planet conjuncts this longitude to trigger the return. */ natalPlanetPosition: { /** * Natal planet ecliptic longitude in degrees (0-360). The transiting planet returns to this exact degree. */ longitude: number; /** * Tropical zodiac sign of the natal planet position. */ sign: string; /** * Degree within the zodiac sign (0-29.999). */ degree: number; }; /** * Planetary return interpretation. Saturn returns (~29 years) mark major life milestones. Jupiter returns (~12 years) signal growth cycles. Inner planet returns offer shorter-term insights. */ interpretation: { /** * Narrative overview of this planetary return cycle and its significance for personal development. */ summary: string; /** * Key life themes activated during this return cycle. Focus areas vary by planet — Jupiter brings expansion, Saturn brings structure and responsibility. */ keyThemes: Array; }; }; }; export type GeneratePlanetaryReturnResponse = GeneratePlanetaryReturnResponses[keyof GeneratePlanetaryReturnResponses]; export type GenerateAstrocartographyData = { body?: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Optional comma separated list of extra bodies to plot beyond the ten classical planets. Allowed values: north-node, chiron, lilith. north-node is the mean lunar node. Unknown values are ignored. Defaults to none. */ include?: string; }; url: '/astrology/astrocartography'; }; export type GenerateAstrocartographyErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateAstrocartographyError = GenerateAstrocartographyErrors[keyof GenerateAstrocartographyErrors]; export type GenerateAstrocartographyResponses = { /** * Astrocartography planetary lines calculated successfully */ 200: AstrocartographyResponse; }; export type GenerateAstrocartographyResponse = GenerateAstrocartographyResponses[keyof GenerateAstrocartographyResponses]; export type GenerateRelocationChartData = { body?: RelocationChartRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/relocation-chart'; }; export type GenerateRelocationChartErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateRelocationChartError = GenerateRelocationChartErrors[keyof GenerateRelocationChartErrors]; export type GenerateRelocationChartResponses = { /** * Relocation chart calculated successfully */ 200: RelocationChartResponse; }; export type GenerateRelocationChartResponse = GenerateRelocationChartResponses[keyof GenerateRelocationChartResponses]; export type GenerateLocalSpaceData = { body?: { /** * Birth date in YYYY-MM-DD format. Combined with time and timezone it fixes the birth instant whose planetary positions are projected onto the local horizon. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is essential: the local horizon rotates a full circle each day, so the azimuth (compass direction) of every body depends on the exact birth time. */ time: string; /** * Birthplace latitude in decimal degrees (-90 to 90). This is the origin point of every local space line and the observer latitude used to turn each body into an azimuth and altitude. */ latitude: number; /** * Birthplace longitude in decimal degrees (-180 to 180). Sets the local horizon orientation and the starting point from which the directional lines radiate. */ longitude: number; /** * Decimal hours from UTC (e.g. -5 for EST, 5.5 for IST, 9 for JST) OR IANA name (e.g. "America/New_York"). IANA resolved to the DST-correct offset for the birth date. */ timezone: number | string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Optional comma-separated extra bodies to add beyond the 10 classical planets. Allowed values: north-node, chiron, lilith. north-node is the mean lunar node. Omit to return the 10 classical planets only. */ include?: string; }; url: '/astrology/local-space'; }; export type GenerateLocalSpaceErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateLocalSpaceError = GenerateLocalSpaceErrors[keyof GenerateLocalSpaceErrors]; export type GenerateLocalSpaceResponses = { /** * Local space map generated successfully */ 200: LocalSpaceResponse; }; export type GenerateLocalSpaceResponse = GenerateLocalSpaceResponses[keyof GenerateLocalSpaceResponses]; export type GenerateFixedStarsData = { body?: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. */ timezone: number | string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node. True is the osculating node and the default, because it is what most Western chart software reports; mean is the smoothed node preferred by several evolutionary schools, so pass "mean" to match one. Nothing else in the chart changes, and the two agree on the sign except when the node sits within about 1.8 degrees of a cusp. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Conjunction orb in degrees, the maximum separation for a star to count as conjunct a chart point. Defaults to 1, maximum 3. Widen it to surface looser contacts or tighten it for only the closest hits. */ orb?: number | null; }; url: '/astrology/fixed-stars'; }; export type GenerateFixedStarsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateFixedStarsError = GenerateFixedStarsErrors[keyof GenerateFixedStarsErrors]; export type GenerateFixedStarsResponses = { /** * Fixed star positions and conjunctions calculated successfully */ 200: FixedStarsResponse; }; export type GenerateFixedStarsResponse = GenerateFixedStarsResponses[keyof GenerateFixedStarsResponses]; export type CalculateArabicLotsData = { body?: ArabicLotsRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/arabic-lots'; }; export type CalculateArabicLotsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateArabicLotsError = CalculateArabicLotsErrors[keyof CalculateArabicLotsErrors]; export type CalculateArabicLotsResponses = { /** * Arabic lots calculated successfully */ 200: ArabicLotsResponse; }; export type CalculateArabicLotsResponse = CalculateArabicLotsResponses[keyof CalculateArabicLotsResponses]; export type GenerateAsteroidsData = { body?: AsteroidsRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/asteroids'; }; export type GenerateAsteroidsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateAsteroidsError = GenerateAsteroidsErrors[keyof GenerateAsteroidsErrors]; export type GenerateAsteroidsResponses = { /** * Asteroid positions calculated successfully */ 200: AsteroidsResponse; }; export type GenerateAsteroidsResponse = GenerateAsteroidsResponses[keyof GenerateAsteroidsResponses]; export type GenerateLilithData = { body?: LilithRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/lilith'; }; export type GenerateLilithErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateLilithError = GenerateLilithErrors[keyof GenerateLilithErrors]; export type GenerateLilithResponses = { /** * Black Moon Lilith calculated successfully */ 200: LilithResponse; }; export type GenerateLilithResponse = GenerateLilithResponses[keyof GenerateLilithResponses]; export type GenerateProgressionsData = { body?: ProgressionsRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/progressions'; }; export type GenerateProgressionsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateProgressionsError = GenerateProgressionsErrors[keyof GenerateProgressionsErrors]; export type GenerateProgressionsResponses = { /** * Progressed chart calculated successfully */ 200: ProgressionsResponse; }; export type GenerateProgressionsResponse = GenerateProgressionsResponses[keyof GenerateProgressionsResponses]; export type GenerateSolarArcData = { body?: SolarArcRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/solar-arc'; }; export type GenerateSolarArcErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateSolarArcError = GenerateSolarArcErrors[keyof GenerateSolarArcErrors]; export type GenerateSolarArcResponses = { /** * Solar arc directed chart calculated successfully */ 200: SolarArcResponse; }; export type GenerateSolarArcResponse = GenerateSolarArcResponses[keyof GenerateSolarArcResponses]; export type GenerateProfectionsData = { body?: ProfectionsRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/astrology/profections'; }; export type GenerateProfectionsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateProfectionsError = GenerateProfectionsErrors[keyof GenerateProfectionsErrors]; export type GenerateProfectionsResponses = { /** * Annual profection calculated successfully */ 200: ProfectionsResponse; }; export type GenerateProfectionsResponse = GenerateProfectionsResponses[keyof GenerateProfectionsResponses]; export type GenerateBirthChartData = { body?: BirthChartRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/birth-chart'; }; export type GenerateBirthChartErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateBirthChartError = GenerateBirthChartErrors[keyof GenerateBirthChartErrors]; export type GenerateBirthChartResponses = { /** * D1 Rashi birth chart with all 12 houses, 9 grahas plus Lagna, combustion analysis (Surya Siddhanta limits, applied as the standard ecliptic longitude orb), planetary war detection, bhava interpretations, and a meta lookup keyed by planet name. */ 200: BirthChartResponse; }; export type GenerateBirthChartResponse = GenerateBirthChartResponses[keyof GenerateBirthChartResponses]; export type GenerateNavamsaData = { body?: NavamsaRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/navamsa'; }; export type GenerateNavamsaErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateNavamsaError = GenerateNavamsaErrors[keyof GenerateNavamsaErrors]; export type GenerateNavamsaResponses = { /** * D9 Navamsa chart with all 12 houses, 9 grahas plus Lagna, Vargottama planet detection, and Vargottama significance explanation. Same structure as birth chart response. */ 200: NavamsaResponse; }; export type GenerateNavamsaResponse = GenerateNavamsaResponses[keyof GenerateNavamsaResponses]; export type GenerateDivisionalChartData = { body?: DivisionalChartRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/divisional-chart'; }; export type GenerateDivisionalChartErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateDivisionalChartError = GenerateDivisionalChartErrors[keyof GenerateDivisionalChartErrors]; export type GenerateDivisionalChartResponses = { /** * Divisional chart calculated successfully */ 200: DivisionalChartResponse; }; export type GenerateDivisionalChartResponse = GenerateDivisionalChartResponses[keyof GenerateDivisionalChartResponses]; export type CalculateGunMilanData = { body?: CompatibilityRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/compatibility'; }; export type CalculateGunMilanErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateGunMilanError = CalculateGunMilanErrors[keyof CalculateGunMilanErrors]; export type CalculateGunMilanResponses = { /** * Ashtakoot Gun Milan result with total score out of 36, percentage, compatibility verdict, detected doshas (Nadi/Bhakoot) with cancellation analysis, dosha cancellation reasons when applicable, recommendation, and detailed breakdown of all 8 kootas. */ 200: CompatibilityResponse; }; export type CalculateGunMilanResponse = CalculateGunMilanResponses[keyof CalculateGunMilanResponses]; export type GetPlanetPositionsData = { body?: PlanetaryPositionsRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/planetary-positions'; }; export type GetPlanetPositionsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetPlanetPositionsError = GetPlanetPositionsErrors[keyof GetPlanetPositionsErrors]; export type GetPlanetPositionsResponses = { /** * Successful planetary positions calculation */ 200: PlanetaryPositionsResponse; }; export type GetPlanetPositionsResponse = GetPlanetPositionsResponses[keyof GetPlanetPositionsResponses]; export type GetMonthlyEphemerisData = { body?: { /** * Year for monthly ephemeris (1900-2100). Defaults to the current year (UTC). */ year?: number; /** * Month number (1-12) for ephemeris. Defaults to the current month (UTC). */ month?: number; /** * Coordinate system for longitude output. "sidereal" (Nirayana) uses Lahiri ayanamsa - standard for Vedic astrology. "tropical" (Sayana) uses raw ecliptic longitude matching Western astrology. Defaults to "sidereal". */ coordinateSystem?: 'sidereal' | 'tropical'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/planetary-positions/monthly'; }; export type GetMonthlyEphemerisErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetMonthlyEphemerisError = GetMonthlyEphemerisErrors[keyof GetMonthlyEphemerisErrors]; export type GetMonthlyEphemerisResponses = { /** * Monthly ephemeris data */ 200: { /** * Year of the ephemeris. Echoes the year that was requested, or the current UTC year when it was omitted. */ year: number; /** * Month of the ephemeris. Echoes the month that was requested, or the current UTC month when it was omitted. */ month: number; /** * Daily planetary position entries for the entire month. */ days: Array<{ /** * Date in YYYY-MM-DD format. */ date: string; /** * Sidereal positions of all 9 Vedic planets on this date at noon UTC. */ positions: Array<{ /** * Planet name, one of the Navagraha (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu). Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use planetLocalized for anything a reader sees. */ planet: string; /** * Planet name in the requested language, for display. Present only when lang is set to a language other than English, since in English it would repeat planet exactly. Rahu and Ketu are rendered as the lunar nodes they are, so Spanish returns Nodo Norte and Nodo Sur while Hindi returns their Sanskrit names. */ planetLocalized?: string; /** * Sidereal ecliptic longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; /** * Zodiac sign (rashi) the planet occupies on this date. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name in the requested language, for display. Present only when lang is set to a language other than English, since in English it would repeat sign exactly. */ signLocalized?: string; /** * Degrees traversed within the current sign (0-30). Useful for precise transit tracking. */ degreeInSign: number; /** * Whether the planet is in retrograde motion (vakri) on this date. */ isRetrograde: boolean; }>; }>; }; }; export type GetMonthlyEphemerisResponse = GetMonthlyEphemerisResponses[keyof GetMonthlyEphemerisResponses]; export type GetCurrentDashaData = { body?: { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Ayanamsa system used to place the birth Moon in its nakshatra, which sets every dasha start and end date. "lahiri" uses Lahiri/Chitrapaksha, the traditional Vedic standard, and is the default. "kp-newcomb" uses the KP-Newcomb dynamic formula, matching Krishnamurti Paddhati software. "kp-old" uses the Krishnamurti original table from KP Reader-1. "raman" uses the B.V. Raman ayanamsa, the second frame traditional Indian software commonly offers beside Lahiri. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. Switching frames shifts every dasha boundary by weeks, so pick the one your reference software uses. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; /** * Set true to attach the KP significators of each period lord: its star lord, sub lord, occupied house, the houses it signifies at levels L1 to L4, and a strength grade. Off by default, so responses stay exactly as they are for clients that only need dates. Requires the birth latitude and longitude, since significators are read off a Placidus house chart, and uses the same ayanamsa frame selected above. */ significators?: boolean; /** * Lunar node type for Rahu and Ketu, used ONLY when "significators" is true. Dasha dates themselves come from the Moon and never move with this field. "mean" uses the smooth mean node (traditional default). "true" uses the osculating node, which swings up to 1.5 degrees either side of mean over a 173-day cycle and can therefore change which house or star a node falls in. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/dasha/current'; }; export type GetCurrentDashaErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetCurrentDashaError = GetCurrentDashaErrors[keyof GetCurrentDashaErrors]; export type GetCurrentDashaResponses = { /** * Currently active Mahadasha, Antardasha, Pratyantardasha, Sookshma and Prana dasha with start/end dates, remaining balance, Moon nakshatra, and Vedic interpretations for each period. */ 200: { /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes?: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus?: 'general' | 'finance'; /** * Birth Moon nakshatra number (1-27). This nakshatra determines the starting dasha lord in the Vimshottari 120-year cycle. */ moonNakshatra: number; /** * Name of the birth Moon nakshatra (lunar mansion). One of 27 Vedic nakshatras from Ashwini to Revati. */ nakshatraName: string; /** * Vimshottari dasha lord of the birth nakshatra. This planet rules the first Mahadasha in the native life cycle. */ nakshatraLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Sidereal (nirayana) longitude of the birth Moon in degrees, 0 to 360, measured in the ayanamsa frame reported below. This single value determines the birth nakshatra and therefore every dasha start and end date in this response. Compare it against a reference chart to reconcile any date difference at its source. */ moonLongitude: number; /** * Ayanamsa actually applied, in degrees. The precession offset subtracted from the tropical (sayana) longitude to get the sidereal (nirayana) one. Lahiri sits near 23 deg 43 min for a 1990 birth, KP-Newcomb near 23 deg 38 min. */ ayanamsa: number; /** * Ayanamsa system used, echoing the request field. One of "lahiri", "kp-newcomb", "kp-old" or "custom". Echoed so a client can confirm which frame produced these dates without re-deriving it. When it reads "custom" the ayanamsa field above carries the exact value you supplied. */ ayanamsaType: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Mahadasha (major planetary period) in the 120-year Vimshottari dasha cycle. Start and end dates are determined by Moon nakshatra at birth. */ mahadasha: { /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; }; /** * Antardasha (bhukti), sub-period within a Mahadasha. Each Mahadasha contains 9 Antardashas proportional to the Vimshottari years of each planet. */ antardasha: { /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; /** * Parent Mahadasha lord under which this Antardasha sub-period runs. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * Pratyantardasha (sub-sub-period), the third level of the Vimshottari dasha hierarchy, Provides finer timing within each Antardasha for event prediction. */ pratyantardasha: { /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; /** * Parent Mahadasha lord under which this Antardasha sub-period runs. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Antardasha lord under which this Pratyantardasha runs. */ antardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * Sookshma dasha (sookshma antardasha), the fourth level of the Vimshottari dasha hierarchy. Each Pratyantardasha divides into 9 Sookshma periods running roughly 3 to 30 days each, used for day-level event timing and muhurta style selection. */ sookshmaDasha: { /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; /** * Parent Mahadasha lord under which this Antardasha sub-period runs. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Antardasha lord under which this Pratyantardasha runs. */ antardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Pratyantardasha lord under which this Sookshma dasha runs. */ pratyantardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * Prana dasha (praana antardasha), the fifth and finest level of the Vimshottari dasha hierarchy. Each Sookshma dasha divides into 9 Prana periods, running from about 20 minutes inside a Sun Mahadasha to about 4 days inside a Saturn one. This is the level that takes Vimshottari from day-level to hour-level timing, used for muhurta selection and pinpointing the trigger inside an already identified window. */ pranaDasha: { /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; /** * Parent Mahadasha lord under which this Antardasha sub-period runs. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Antardasha lord under which this Pratyantardasha runs. */ antardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Pratyantardasha lord under which this Sookshma dasha runs. */ pratyantardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Sookshma dasha lord under which this Prana dasha runs. */ sookshmaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * Houses common to the significators of the running dasha lords. In KP a matter fructifies under lords that jointly signify the houses of that matter, so these two sets are what a prediction is checked against. */ commonHouses?: { /** * Houses signified by ALL FIVE running lords at once (Mahadasha through Prana). The tightest reading available: a house every active level carries is the one the current moment is pointed at. Often empty, which is itself informative, it means the five levels do not converge on a single house. */ allLevels: Array; /** * Houses signified by the Mahadasha, Antardasha and Pratyantardasha lords together, the classical KP three-lord test used to decide whether a matter fructifies in the running period. Wider than allLevels because it ignores the two fastest levels, which is what makes it the practical filter for month-scale predictions. */ dashaBhuktiAntara: Array; }; /** * Time remaining in the currently running Mahadasha (major period). */ remainingInMahadasha: { /** * Full years remaining in this Vimshottari dasha period. */ years: number; /** * Additional months remaining beyond full years. */ months: number; /** * Additional days remaining beyond full months. */ days: number; /** * Total remaining days in this dasha period. Useful for progress calculations. */ totalDays: number; }; /** * Time remaining in the currently running Antardasha (sub-period) within the Mahadasha. */ remainingInAntardasha: { /** * Full years remaining in this Vimshottari dasha period. */ years: number; /** * Additional months remaining beyond full years. */ months: number; /** * Additional days remaining beyond full months. */ days: number; /** * Total remaining days in this dasha period. Useful for progress calculations. */ totalDays: number; }; /** * Time remaining in the currently running Pratyantardasha (sub-sub-period). */ remainingInPratyantardasha: { /** * Full years remaining in this Vimshottari dasha period. */ years: number; /** * Additional months remaining beyond full years. */ months: number; /** * Additional days remaining beyond full months. */ days: number; /** * Total remaining days in this dasha period. Useful for progress calculations. */ totalDays: number; }; /** * Time remaining in the currently running Sookshma dasha (fourth level). Sookshma periods last days rather than months, so this value turns over quickly. */ remainingInSookshma: { /** * Full years remaining in this Vimshottari dasha period. */ years: number; /** * Additional months remaining beyond full years. */ months: number; /** * Additional days remaining beyond full months. */ days: number; /** * Total remaining days in this dasha period. Useful for progress calculations. */ totalDays: number; }; /** * Time remaining in the currently running Prana dasha (fifth level). Prana periods run hours to days, so totalDays is often 0 or 1 and the years and months fields are almost always zero. */ remainingInPrana: { /** * Full years remaining in this Vimshottari dasha period. */ years: number; /** * Additional months remaining beyond full years. */ months: number; /** * Additional days remaining beyond full months. */ days: number; /** * Total remaining days in this dasha period. Useful for progress calculations. */ totalDays: number; }; }; }; export type GetCurrentDashaResponse = GetCurrentDashaResponses[keyof GetCurrentDashaResponses]; export type GetMajorDashasData = { body?: { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Ayanamsa system used to place the birth Moon in its nakshatra, which sets every dasha start and end date. "lahiri" uses Lahiri/Chitrapaksha, the traditional Vedic standard, and is the default. "kp-newcomb" uses the KP-Newcomb dynamic formula, matching Krishnamurti Paddhati software. "kp-old" uses the Krishnamurti original table from KP Reader-1. "raman" uses the B.V. Raman ayanamsa, the second frame traditional Indian software commonly offers beside Lahiri. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. Switching frames shifts every dasha boundary by weeks, so pick the one your reference software uses. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; /** * Set true to attach the KP significators of each period lord: its star lord, sub lord, occupied house, the houses it signifies at levels L1 to L4, and a strength grade. Off by default, so responses stay exactly as they are for clients that only need dates. Requires the birth latitude and longitude, since significators are read off a Placidus house chart, and uses the same ayanamsa frame selected above. */ significators?: boolean; /** * Lunar node type for Rahu and Ketu, used ONLY when "significators" is true. Dasha dates themselves come from the Moon and never move with this field. "mean" uses the smooth mean node (traditional default). "true" uses the osculating node, which swings up to 1.5 degrees either side of mean over a 173-day cycle and can therefore change which house or star a node falls in. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/dasha/major'; }; export type GetMajorDashasErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetMajorDashasError = GetMajorDashasErrors[keyof GetMajorDashasErrors]; export type GetMajorDashasResponses = { /** * Complete 120-year Vimshottari Dasha timeline with all 9 Mahadasha periods, birth dasha balance, Moon nakshatra, and start/end dates for each planetary period. */ 200: { /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes?: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus?: 'general' | 'finance'; /** * Birth Moon nakshatra number (1-27) that determines the Vimshottari starting point. */ moonNakshatra: number; /** * Birth Moon nakshatra name, one of 27 Vedic lunar mansions. */ nakshatraName: string; /** * Dasha lord of the birth nakshatra, rules the first Mahadasha. */ nakshatraLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Sidereal (nirayana) longitude of the birth Moon in degrees, 0 to 360, measured in the ayanamsa frame reported below. This single value determines the birth nakshatra and therefore every dasha start and end date in this response. Compare it against a reference chart to reconcile any date difference at its source. */ moonLongitude: number; /** * Ayanamsa actually applied, in degrees. The precession offset subtracted from the tropical (sayana) longitude to get the sidereal (nirayana) one. Lahiri sits near 23 deg 43 min for a 1990 birth, KP-Newcomb near 23 deg 38 min. */ ayanamsa: number; /** * Ayanamsa system used, echoing the request field. One of "lahiri", "kp-newcomb", "kp-old" or "custom". Echoed so a client can confirm which frame produced these dates without re-deriving it. When it reads "custom" the ayanamsa field above carries the exact value you supplied. */ ayanamsaType: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Remaining balance of the first Mahadasha at birth. Based on Moon degree within the birth nakshatra. partial dasha already elapsed before birth. */ birthDashaBalance: { /** * Full years remaining in this Vimshottari dasha period. */ years: number; /** * Additional months remaining beyond full years. */ months: number; /** * Additional days remaining beyond full months. */ days: number; /** * Total remaining days in this dasha period. Useful for progress calculations. */ totalDays: number; }; /** * Complete sequence of all 9 Mahadasha periods spanning 120 years from birth. Follows the Vimshottari order: Ketu(7), Venus(20), Sun(6), Moon(10), Mars(7), Rahu(18), Jupiter(16), Saturn(19), Mercury(17). */ mahadashas: Array<{ /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; }>; /** * Total Vimshottari cycle length in years (always 120). */ totalYears: number; }; }; export type GetMajorDashasResponse = GetMajorDashasResponses[keyof GetMajorDashasResponses]; export type GetSubDashasData = { body?: { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Ayanamsa system used to place the birth Moon in its nakshatra, which sets every dasha start and end date. "lahiri" uses Lahiri/Chitrapaksha, the traditional Vedic standard, and is the default. "kp-newcomb" uses the KP-Newcomb dynamic formula, matching Krishnamurti Paddhati software. "kp-old" uses the Krishnamurti original table from KP Reader-1. "raman" uses the B.V. Raman ayanamsa, the second frame traditional Indian software commonly offers beside Lahiri. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. Switching frames shifts every dasha boundary by weeks, so pick the one your reference software uses. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; /** * Set true to attach the KP significators of each period lord: its star lord, sub lord, occupied house, the houses it signifies at levels L1 to L4, and a strength grade. Off by default, so responses stay exactly as they are for clients that only need dates. Requires the birth latitude and longitude, since significators are read off a Placidus house chart, and uses the same ayanamsa frame selected above. */ significators?: boolean; /** * Lunar node type for Rahu and Ketu, used ONLY when "significators" is true. Dasha dates themselves come from the Moon and never move with this field. "mean" uses the smooth mean node (traditional default). "true" uses the osculating node, which swings up to 1.5 degrees either side of mean over a 173-day cycle and can therefore change which house or star a node falls in. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; path: { /** * Mahadasha planet name, case-insensitive (e.g., jupiter, Jupiter, JUPITER all work). Valid: Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury. */ mahadasha: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/dasha/sub/{mahadasha}'; }; export type GetSubDashasErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetSubDashasError = GetSubDashasErrors[keyof GetSubDashasErrors]; export type GetSubDashasResponses = { /** * All 9 Antardasha sub-periods within the specified Mahadasha, with start/end dates and the parent Mahadasha period details. */ 200: { /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes?: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus?: 'general' | 'finance'; /** * Ruling planet of the requested Mahadasha period. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Sidereal (nirayana) longitude of the birth Moon in degrees, 0 to 360, measured in the ayanamsa frame reported below. This single value determines the birth nakshatra and therefore every dasha start and end date in this response. Compare it against a reference chart to reconcile any date difference at its source. */ moonLongitude: number; /** * Ayanamsa actually applied, in degrees. The precession offset subtracted from the tropical (sayana) longitude to get the sidereal (nirayana) one. Lahiri sits near 23 deg 43 min for a 1990 birth, KP-Newcomb near 23 deg 38 min. */ ayanamsa: number; /** * Ayanamsa system used, echoing the request field. One of "lahiri", "kp-newcomb", "kp-old" or "custom". Echoed so a client can confirm which frame produced these dates without re-deriving it. When it reads "custom" the ayanamsa field above carries the exact value you supplied. */ ayanamsaType: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Full details of the parent Mahadasha including start/end dates and duration. */ mahadashaPeriod: { /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; }; /** * Antardasha (bhukti) sub-periods within this Mahadasha, proportional to each planet Vimshottari years, sorted chronologically. Nine for any Mahadasha the native lived through in full. FEWER than nine for the first Mahadasha in the chart, because the Vimshottari cycle was already running at birth: the Antardashas that ended before the birth date are not part of the chart, and the one in force at birth starts on the birth date. */ antardashas: Array<{ /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; /** * Parent Mahadasha lord under which this Antardasha sub-period runs. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }>; }; }; export type GetSubDashasResponse = GetSubDashasResponses[keyof GetSubDashasResponses]; export type GetPratyantardashasData = { body?: { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Ayanamsa system used to place the birth Moon in its nakshatra, which sets every dasha start and end date. "lahiri" uses Lahiri/Chitrapaksha, the traditional Vedic standard, and is the default. "kp-newcomb" uses the KP-Newcomb dynamic formula, matching Krishnamurti Paddhati software. "kp-old" uses the Krishnamurti original table from KP Reader-1. "raman" uses the B.V. Raman ayanamsa, the second frame traditional Indian software commonly offers beside Lahiri. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. Switching frames shifts every dasha boundary by weeks, so pick the one your reference software uses. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; /** * Set true to attach the KP significators of each period lord: its star lord, sub lord, occupied house, the houses it signifies at levels L1 to L4, and a strength grade. Off by default, so responses stay exactly as they are for clients that only need dates. Requires the birth latitude and longitude, since significators are read off a Placidus house chart, and uses the same ayanamsa frame selected above. */ significators?: boolean; /** * Lunar node type for Rahu and Ketu, used ONLY when "significators" is true. Dasha dates themselves come from the Moon and never move with this field. "mean" uses the smooth mean node (traditional default). "true" uses the osculating node, which swings up to 1.5 degrees either side of mean over a 173-day cycle and can therefore change which house or star a node falls in. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; path: { /** * Mahadasha planet name, case-insensitive (e.g. saturn, Saturn, SATURN all work). Valid: Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury. */ mahadasha: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Antardasha (bhukti) planet name inside that Mahadasha, case-insensitive. Every Mahadasha contains all 9 lords, so a repeat such as saturn/saturn is valid. */ antardasha: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/dasha/sub/{mahadasha}/{antardasha}'; }; export type GetPratyantardashasErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetPratyantardashasError = GetPratyantardashasErrors[keyof GetPratyantardashasErrors]; export type GetPratyantardashasResponses = { /** * All 9 Pratyantardasha periods within the specified Mahadasha and Antardasha, with start/end dates and the parent Antardasha period details. */ 200: { /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes?: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus?: 'general' | 'finance'; /** * Ruling planet of the requested Mahadasha period. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Ruling planet of the requested Antardasha sub-period. */ antardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Sidereal (nirayana) longitude of the birth Moon in degrees, 0 to 360, measured in the ayanamsa frame reported below. This single value determines the birth nakshatra and therefore every dasha start and end date in this response. Compare it against a reference chart to reconcile any date difference at its source. */ moonLongitude: number; /** * Ayanamsa actually applied, in degrees. The precession offset subtracted from the tropical (sayana) longitude to get the sidereal (nirayana) one. Lahiri sits near 23 deg 43 min for a 1990 birth, KP-Newcomb near 23 deg 38 min. */ ayanamsa: number; /** * Ayanamsa system used, echoing the request field. One of "lahiri", "kp-newcomb", "kp-old" or "custom". Echoed so a client can confirm which frame produced these dates without re-deriving it. When it reads "custom" the ayanamsa field above carries the exact value you supplied. */ ayanamsaType: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Full details of the parent Antardasha including start/end dates and duration. */ antardashaPeriod: { /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; /** * Parent Mahadasha lord under which this Antardasha sub-period runs. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * Pratyantardasha (antara) periods within this Antardasha, proportional to each planet Vimshottari years, sorted chronologically and starting with the Antardasha lord. Fewer than nine only when the parent Antardasha is the one that was already running at birth, in which case the periods that ended before the birth date are omitted. */ pratyantardashas: Array<{ /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; /** * Parent Mahadasha lord under which this Antardasha sub-period runs. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Antardasha lord under which this Pratyantardasha runs. */ antardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }>; }; }; export type GetPratyantardashasResponse = GetPratyantardashasResponses[keyof GetPratyantardashasResponses]; export type GetSookshmaDashasData = { body?: { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Ayanamsa system used to place the birth Moon in its nakshatra, which sets every dasha start and end date. "lahiri" uses Lahiri/Chitrapaksha, the traditional Vedic standard, and is the default. "kp-newcomb" uses the KP-Newcomb dynamic formula, matching Krishnamurti Paddhati software. "kp-old" uses the Krishnamurti original table from KP Reader-1. "raman" uses the B.V. Raman ayanamsa, the second frame traditional Indian software commonly offers beside Lahiri. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. Switching frames shifts every dasha boundary by weeks, so pick the one your reference software uses. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; /** * Set true to attach the KP significators of each period lord: its star lord, sub lord, occupied house, the houses it signifies at levels L1 to L4, and a strength grade. Off by default, so responses stay exactly as they are for clients that only need dates. Requires the birth latitude and longitude, since significators are read off a Placidus house chart, and uses the same ayanamsa frame selected above. */ significators?: boolean; /** * Lunar node type for Rahu and Ketu, used ONLY when "significators" is true. Dasha dates themselves come from the Moon and never move with this field. "mean" uses the smooth mean node (traditional default). "true" uses the osculating node, which swings up to 1.5 degrees either side of mean over a 173-day cycle and can therefore change which house or star a node falls in. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; path: { /** * Mahadasha planet name, case-insensitive. Valid: Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury. */ mahadasha: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Antardasha (bhukti) planet name inside that Mahadasha, case-insensitive. */ antardasha: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Pratyantardasha (antara) planet name inside that Antardasha, case-insensitive. */ pratyantardasha: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/dasha/sub/{mahadasha}/{antardasha}/{pratyantardasha}'; }; export type GetSookshmaDashasErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetSookshmaDashasError = GetSookshmaDashasErrors[keyof GetSookshmaDashasErrors]; export type GetSookshmaDashasResponses = { /** * All 9 Sookshma dasha periods within the specified Mahadasha, Antardasha, and Pratyantardasha, with start/end dates and the parent Pratyantardasha period details. */ 200: { /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes?: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus?: 'general' | 'finance'; /** * Ruling planet of the requested Mahadasha period. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Ruling planet of the requested Antardasha sub-period. */ antardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Ruling planet of the requested Pratyantardasha sub-sub-period. */ pratyantardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Sidereal (nirayana) longitude of the birth Moon in degrees, 0 to 360, measured in the ayanamsa frame reported below. This single value determines the birth nakshatra and therefore every dasha start and end date in this response. Compare it against a reference chart to reconcile any date difference at its source. */ moonLongitude: number; /** * Ayanamsa actually applied, in degrees. The precession offset subtracted from the tropical (sayana) longitude to get the sidereal (nirayana) one. Lahiri sits near 23 deg 43 min for a 1990 birth, KP-Newcomb near 23 deg 38 min. */ ayanamsa: number; /** * Ayanamsa system used, echoing the request field. One of "lahiri", "kp-newcomb", "kp-old" or "custom". Echoed so a client can confirm which frame produced these dates without re-deriving it. When it reads "custom" the ayanamsa field above carries the exact value you supplied. */ ayanamsaType: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Full details of the parent Pratyantardasha including start/end dates and duration. */ pratyantardashaPeriod: { /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; /** * Parent Mahadasha lord under which this Antardasha sub-period runs. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Antardasha lord under which this Pratyantardasha runs. */ antardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * Sookshma dasha periods within this Pratyantardasha, proportional to each planet Vimshottari years, sorted chronologically and starting with the Pratyantardasha lord. Fewer than nine only when the parent Pratyantardasha is the one that was already running at birth, in which case the periods that ended before the birth date are omitted. */ sookshmaDashas: Array<{ /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; /** * Parent Mahadasha lord under which this Antardasha sub-period runs. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Antardasha lord under which this Pratyantardasha runs. */ antardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Pratyantardasha lord under which this Sookshma dasha runs. */ pratyantardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }>; }; }; export type GetSookshmaDashasResponse = GetSookshmaDashasResponses[keyof GetSookshmaDashasResponses]; export type GetPranaDashasData = { body?: { /** * Birth date in YYYY-MM-DD format. Date determines planetary positions and nakshatra calculations for Vedic kundli (janam patri). Accurate birth date is essential for dashas, yoga calculations, and divisional charts (vargas). */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Time is CRITICAL for Lagna (Ascendant) calculation and house divisions. It changes every two hours roughly. Even minutes matter for accurate nakshatra pada and divisional chart (D9, D10) calculations. Without exact time, Lagna and house-based predictions will be incorrect. */ time: string; /** * Birth location latitude in decimal degrees. Location determines local sidereal time for Lagna calculation and affects bhava (house) cusps. Example: Delhi 28.6139, Mumbai 19.0760, Kathmandu 27.7172. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local time calculations and ayanamsha adjustments. Example: Delhi 77.2090, Mumbai 72.8777, Kathmandu 85.3240. */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC (e.g. -5 for EST, 1 for CET). IANA strings are resolved to the DST-correct offset for the given date, so you can pass `cities[0].timezone` from /location/search directly. Defaults to 5.5. */ timezone?: number | string; /** * Ayanamsa system used to place the birth Moon in its nakshatra, which sets every dasha start and end date. "lahiri" uses Lahiri/Chitrapaksha, the traditional Vedic standard, and is the default. "kp-newcomb" uses the KP-Newcomb dynamic formula, matching Krishnamurti Paddhati software. "kp-old" uses the Krishnamurti original table from KP Reader-1. "raman" uses the B.V. Raman ayanamsa, the second frame traditional Indian software commonly offers beside Lahiri. "custom" takes your own value in degrees via ayanamsaValue, for reconciling exactly against a specific reference program. Switching frames shifts every dasha boundary by weeks, so pick the one your reference software uses. */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Custom ayanamsa value in degrees. When provided, overrides the computed ayanamsa from the selected type. Use for testing with specific ayanamsa values or matching a particular reference source. */ ayanamsaValue?: number; /** * Set true to attach the KP significators of each period lord: its star lord, sub lord, occupied house, the houses it signifies at levels L1 to L4, and a strength grade. Off by default, so responses stay exactly as they are for clients that only need dates. Requires the birth latitude and longitude, since significators are read off a Placidus house chart, and uses the same ayanamsa frame selected above. */ significators?: boolean; /** * Lunar node type for Rahu and Ketu, used ONLY when "significators" is true. Dasha dates themselves come from the Moon and never move with this field. "mean" uses the smooth mean node (traditional default). "true" uses the osculating node, which swings up to 1.5 degrees either side of mean over a 173-day cycle and can therefore change which house or star a node falls in. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; path: { /** * Mahadasha planet name, case-insensitive. Valid: Ketu, Venus, Sun, Moon, Mars, Rahu, Jupiter, Saturn, Mercury. */ mahadasha: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Antardasha (bhukti) planet name inside that Mahadasha, case-insensitive. */ antardasha: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Pratyantardasha (antara) planet name inside that Antardasha, case-insensitive. */ pratyantardasha: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Sookshma dasha planet name inside that Pratyantardasha, case-insensitive. Every full period contains all 9 lords, so a repeat such as saturn/saturn/saturn/saturn is valid. */ sookshma: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/dasha/sub/{mahadasha}/{antardasha}/{pratyantardasha}/{sookshma}'; }; export type GetPranaDashasErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetPranaDashasError = GetPranaDashasErrors[keyof GetPranaDashasErrors]; export type GetPranaDashasResponses = { /** * All 9 Prana dasha periods within the specified Mahadasha, Antardasha, Pratyantardasha, and Sookshma dasha, with start/end dates and the parent Sookshma period details. */ 200: { /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes?: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus?: 'general' | 'finance'; /** * Ruling planet of the requested Mahadasha period. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Ruling planet of the requested Antardasha sub-period. */ antardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Ruling planet of the requested Pratyantardasha sub-sub-period. */ pratyantardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Ruling planet of the requested Sookshma dasha. */ sookshmaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Sidereal (nirayana) longitude of the birth Moon in degrees, 0 to 360, measured in the ayanamsa frame reported below. This single value determines the birth nakshatra and therefore every dasha start and end date in this response. Compare it against a reference chart to reconcile any date difference at its source. */ moonLongitude: number; /** * Ayanamsa actually applied, in degrees. The precession offset subtracted from the tropical (sayana) longitude to get the sidereal (nirayana) one. Lahiri sits near 23 deg 43 min for a 1990 birth, KP-Newcomb near 23 deg 38 min. */ ayanamsa: number; /** * Ayanamsa system used, echoing the request field. One of "lahiri", "kp-newcomb", "kp-old" or "custom". Echoed so a client can confirm which frame produced these dates without re-deriving it. When it reads "custom" the ayanamsa field above carries the exact value you supplied. */ ayanamsaType: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman' | 'custom'; /** * Full details of the parent Sookshma dasha including start/end dates and duration. */ sookshmaPeriod: { /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; /** * Parent Mahadasha lord under which this Antardasha sub-period runs. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Antardasha lord under which this Pratyantardasha runs. */ antardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Pratyantardasha lord under which this Sookshma dasha runs. */ pratyantardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }; /** * Prana dasha periods within this Sookshma dasha, proportional to each planet Vimshottari years, sorted chronologically and starting with the Sookshma lord. Fewer than nine only when the parent Sookshma dasha is the one that was already running at birth, in which case the periods that ended before the birth date are omitted. */ pranaDashas: Array<{ /** * Ruling graha of this Vimshottari dasha period. One of 9 planets in the Ketu-Venus-Sun-Moon-Mars-Rahu-Jupiter-Saturn-Mercury sequence. */ planet: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Start datetime of this dasha period. Adjusted to the requested timezone offset. */ startDate: string; /** * End datetime of this dasha period. Adjusted to the requested timezone offset. */ endDate: string; /** * Duration of this dasha period in years. Mahadasha durations range from 6 years (Sun) to 20 years (Venus). */ durationYears: number; /** * Theoretical start of this period, present ONLY when the birth date truncated it. The Vimshottari cycle is already running when a native is born, so the period in force at birth began earlier: startDate is clipped to the birth moment while this field keeps the real start. Its presence is also why the first period of a chart can contain fewer than 9 sub-periods, the earlier ones having finished before birth. Absent on every period that runs its full length. */ nominalStartDate?: string; /** * Vedic interpretation of the planetary period describing themes, karmic lessons, and life areas affected by this graha. */ interpretation?: string; /** * KP significators of this period lord, read from the Placidus birth chart in the requested ayanamsa. Present only when the request sets "significators": true. */ significators?: { /** * House 1-12 this lord occupies in the Placidus birth chart. Its own Level 2 signification, repeated here because the occupied house is the first thing a KP reading looks at. */ house: number; /** * Lord of the nakshatra this planet sits in, one of the 9 grahas. In KP the star lord outranks the planet itself: a period lord mainly delivers the houses its star lord occupies and owns, which is why those appear at L1 and L3 rather than the planet own house. */ starLord: string; /** * KP sub lord of this planet, the 1 of 249 subdivision its longitude falls in, one of the 9 grahas. The star lord says WHAT results the period gives, the sub lord says WHETHER they materialize, so KP judgement checks both. */ subLord?: string; /** * KP 4-level significator breakdown showing which houses (1-12) this planet signifies at each strength tier. L1 is strongest, L4 is weakest. */ signifies: { /** * Level 1, the strongest signification (grade A). Houses influenced because this planet sits in the nakshatra (star) of a planet occupying those houses. For Rahu and Ketu, also includes the L1 houses of their agent planets (conjoined, aspecting, sign lord). */ L1: Array; /** * Level 2 (grade B). The house this planet physically occupies. For Rahu and Ketu, also includes houses occupied by their agent planets. */ L2: Array; /** * Level 3 (grade C). Houses influenced because this planet sits in the nakshatra of the sign lord (owner) of those houses. For Rahu and Ketu, also includes the L3 houses of their agent planets. */ L3: Array; /** * Level 4, the weakest signification (grade D). Houses this planet rules by zodiac sign ownership, up to 2 for Sun through Saturn and 3 where a sign is intercepted. Rahu and Ketu own no sign, so their L4 comes entirely from their agent planets. */ L4: Array; }; /** * Every house this lord signifies, deduplicated and ordered strongest tier first. Where a house is reached at more than one level it is listed once, at its strongest. This is the flat "houses signified" column of a KP dasha table. */ signifiedHouses: Array; /** * Subset of signifiedHouses reached at grade A or B (levels L1 and L2). These are the houses a KP reading acts on for this period; the rest are supporting connections. */ strongHouses: Array; /** * How firmly this lord is tied to the houses it signifies, on the KP A to D significator grading. Reproducible from the significator levels alone, in two steps. STEP 1, per house keep only the strongest level: a planet routinely reaches the same house at more than one level, for example its star lord occupies house 11 and it also owns house 11, and KP cites a significator by its best connection, so that house counts once at grade A. This is why signifiedHouses is shorter than the four level arrays concatenated, and omitting it is what makes a hand calculation disagree. STEP 2, average the surviving weights: each house contributes 100, 75, 50 or 25 for grade A, B, C or D, and the mean is the score. Worked example, a lord signifying house 11 at level 1, house 6 at level 2 and house 2 at level 4 scores (100 + 75 + 25) / 3 = 66.7, which lands in band B because the band edges are the midpoints 87.5, 62.5 and 37.5. The score says how firmly the lord is connected, never whether the houses are favourable, which depends on the matter being judged. */ strength: { /** * Mean KP percentage weight across signifiedHouses, each house counted at its strongest level (A 100, B 75, C 50, D 25). A mean rather than a total, so signifying many houses weakly does not outrank signifying two houses at grade A. */ score: number; /** * Band the score falls in, on the standard KP significator grading: A planets in the constellation of the occupant, B occupants, C planets in the constellation of the house owner, D the house owner. Band edges are the midpoints between the four weights. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Plain-language form of grade: "very-strong" for A, "strong" for B, "moderate" for C, "weak" for D. Says how firmly this lord is connected to the houses it signifies, NOT whether those houses are favourable, which depends on the matter being judged. */ label: 'very-strong' | 'strong' | 'moderate' | 'weak'; }; }; /** * Parent Mahadasha lord under which this Antardasha sub-period runs. */ mahadashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Antardasha lord under which this Pratyantardasha runs. */ antardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Pratyantardasha lord under which this Sookshma dasha runs. */ pratyantardashaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; /** * Parent Sookshma dasha lord under which this Prana dasha runs. */ sookshmaLord: 'Ketu' | 'Venus' | 'Sun' | 'Moon' | 'Mars' | 'Rahu' | 'Jupiter' | 'Saturn' | 'Mercury'; }>; }; }; export type GetPranaDashasResponse = GetPranaDashasResponses[keyof GetPranaDashasResponses]; export type GetVedicDailyReadingData = { body?: { /** * Birth date in YYYY-MM-DD format. Fixes the Janma Rashi and Janma Nakshatra every part of this reading is counted from, and the natal Ashtakavarga the bindu gate reads. */ birthDate: string; /** * Birth time in HH:MM:SS format (24-hour). The Moon moves about half a degree an hour, so an error here moves the Janma Rashi and Janma Nakshatra and therefore every gochara house count, the tarabala and the chandrabala in this response. */ birthTime: string; /** * Birth location latitude in decimal degrees. Sets the natal house cusps behind the Ashtakavarga scorecard and the KP significators, and the sunrise that opens the panchanga day. */ latitude: number; /** * Birth location longitude in decimal degrees. Affects local sidereal time for the natal cusps and the sunrise the reading is composed at. */ longitude: number; /** * Timezone: IANA name (e.g. "Asia/Kolkata", "America/New_York") OR decimal hours from UTC (e.g. -5 for EST, 5.5 for IST). IANA strings are resolved to the DST-correct offset for the date being read. Interprets the birth time and the civil date below. Defaults to 5.5. */ timezone?: number | string; /** * Civil date to read, in YYYY-MM-DD format. Defaults to today (UTC). The panchanga day it names runs from sunrise at the birth coordinates to the next sunrise, not from midnight, so a reading for this date covers the night that follows it. */ date?: string; /** * Lunar node type for Rahu and Ketu. "mean" uses the smooth mean node, which is the traditional Vedic default and what printed panchangs use. "true" uses the osculating node, which swings up to 1.5 degrees either side of mean and can therefore move a node into a different rashi and change its gochara house. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/daily'; }; export type GetVedicDailyReadingErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetVedicDailyReadingError = GetVedicDailyReadingErrors[keyof GetVedicDailyReadingErrors]; export type GetVedicDailyReadingResponses = { /** * Daily reading composed successfully */ 200: { /** * Every sidereal frame behind this reading, so a cached or forwarded payload is self describing and no number sits under a label it did not come from. TWO ayanamsas are in play by design: positions are Lahiri, and the Placidus cusps plus the KP significators are KP-Newcomb, which is the frame KP owns and the split a practitioner actually works in. The two differ by about 0.09 degrees, which is under a third of a KP sub-lord span and enough to move a placement near a boundary, so the reading declares which produced what rather than leaving a caller to guess. THREE entries for two ayanamsas, because Lahiri is read at two instants: the birth moment and the sunrise of the day being read, roughly half a degree apart on a chart forty years old, six times the gap between the two ayanamsas themselves. There is no ayanamsa request field on this route and there will not be one, since a single selector cannot honour two frames and accepting it would promise something the composition cannot deliver. */ frames: { /** * Lahiri at the birth instant. Produces the natal Moon this whole reading is counted from, the Vimshottari balance, and the natal graha rows of the Ashtakavarga scorecard the bindu gate reads. */ natal: { /** * Sidereal frame this part of the reading was cast in. Always "lahiri" here: it is not a caller choice, because the composition runs two frames at once and a single request field could only ever name one of them. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude this frame produced. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; /** * ISO instant the ayanamsa was read at. Part of the value, not metadata: an ayanamsa moves about 50.3 arcseconds a year, so the same frame read at a birth in 1984 and at a transit in 2026 differs by more than half a degree. */ at: string; /** * Response sections this frame is a determinant of, as paths into this payload. One of subject, grahas, panchanga, tara, chandrabala, dasha, areas.finance. A section appears under EVERY frame that feeds it, which is why grahas is listed three times: the transiting longitudes and the natal Moon they are counted from are both Lahiri read at different instants, while the Ashtakavarga Lagna row behind binduCount and kaksha is KP-Newcomb. Exactly two sections belong to one frame alone, subject to the natal frame and panchanga to the transit frame. */ governs: Array<'subject' | 'grahas' | 'panchanga' | 'tara' | 'chandrabala' | 'dasha' | 'areas.finance'>; }; /** * Lahiri at sunrise on the day being read. Produces every transiting longitude and every panchanga limb. Inside one day precession moves it 0.14 arcseconds, so this one value speaks for every limb resolved between the two sunrises. */ transit: { /** * Sidereal frame this part of the reading was cast in. Always "lahiri" here: it is not a caller choice, because the composition runs two frames at once and a single request field could only ever name one of them. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude this frame produced. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; /** * ISO instant the ayanamsa was read at. Part of the value, not metadata: an ayanamsa moves about 50.3 arcseconds a year, so the same frame read at a birth in 1984 and at a transit in 2026 differs by more than half a degree. */ at: string; /** * Response sections this frame is a determinant of, as paths into this payload. One of subject, grahas, panchanga, tara, chandrabala, dasha, areas.finance. A section appears under EVERY frame that feeds it, which is why grahas is listed three times: the transiting longitudes and the natal Moon they are counted from are both Lahiri read at different instants, while the Ashtakavarga Lagna row behind binduCount and kaksha is KP-Newcomb. Exactly two sections belong to one frame alone, subject to the natal frame and panchanga to the transit frame. */ governs: Array<'subject' | 'grahas' | 'panchanga' | 'tara' | 'chandrabala' | 'dasha' | 'areas.finance'>; }; /** * KP-Newcomb, read at UTC midnight of the birth date. Produces the Placidus cusps behind the Ashtakavarga Lagna row and the KP significators behind the finance area, exactly as every KP route on this API computes them. */ kp: { /** * Sidereal frame this part of the reading was cast in. Always "kp-newcomb" here: it is not a caller choice, because the composition runs two frames at once and a single request field could only ever name one of them. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude this frame produced. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; /** * ISO instant the ayanamsa was read at. Part of the value, not metadata: an ayanamsa moves about 50.3 arcseconds a year, so the same frame read at a birth in 1984 and at a transit in 2026 differs by more than half a degree. */ at: string; /** * Response sections this frame is a determinant of, as paths into this payload. One of subject, grahas, panchanga, tara, chandrabala, dasha, areas.finance. A section appears under EVERY frame that feeds it, which is why grahas is listed three times: the transiting longitudes and the natal Moon they are counted from are both Lahiri read at different instants, while the Ashtakavarga Lagna row behind binduCount and kaksha is KP-Newcomb. Exactly two sections belong to one frame alone, subject to the natal frame and panchanga to the transit frame. */ governs: Array<'subject' | 'grahas' | 'panchanga' | 'tara' | 'chandrabala' | 'dasha' | 'areas.finance'>; }; }; /** * Civil date this reading covers, echoing the request field or the UTC date it defaulted to. */ date: string; /** * ISO instant the panchanga day begins, which is SUNRISE at the birth coordinates and not midnight. Every limb below is resolved at this instant. Where the Sun does not rise, local noon is used instead and the substitution is named in degraded rather than applied silently. */ dayStart: string; /** * ISO instant the panchanga day ends, which is the next sunrise. */ dayEnd: string; /** * The two natal reference points this whole reading is counted from, plus the longitude they come from. */ subject: { /** * Natal Moon rashi, the reference point every gochara house count in this response is taken from. Always English. */ janmaRashi: string; /** * Natal Moon nakshatra, the reference point the tarabala is counted from. Canonical Sanskrit. */ janmaNakshatra: string; /** * Janma Nakshatra number 1 to 27, counted from Ashwini. */ janmaNakshatraNumber: number; /** * Sidereal longitude of the natal Moon in degrees. The single value both reference points are derived from, so any disagreement with a reference chart can be traced to its source rather than to a verdict. */ moonLongitude: number; }; /** * The four panchanga limbs, each resolved at sunrise and each carrying the instant it gives way, so a client can label the whole day rather than asserting one value for it. */ panchanga: { /** * Weekday of the panchanga day. The Hindu vara runs sunrise to sunrise, so it can differ from the civil weekday of the same date before dawn. Always English. */ vara: string; /** * The same weekday under its Sanskrit name. */ varaSanskrit: string; /** * Lunar fortnight at sunrise: Shukla for the waxing half, Krishna for the waning half. */ paksha: string; /** * Tithi (lunar day) running at sunrise, with the instant it ends. The tithi is the 12-degree step of the Moon away from the Sun, so its length varies through the month. */ tithi: { /** * tithi number in its own cycle, resolved at sunrise. */ number: number; /** * Name of the tithi running at sunrise. Canonical Sanskrit, so it stays safe to compare against in code. */ name: string; /** * ISO instant this tithi ends. Read from the same transition search POST /panchang/detailed publishes, never recomputed here, so the two endpoints cannot disagree about when the event happens. */ validTo: string; /** * The tithi that follows, so the rest of the day can be labelled without a second request. */ next: string; /** * How long this component holds one verdict. Present on every component because this reading joins two genres classical literature keeps in separate books: a gochara verdict lasts as long as the graha stays in a rashi, which is years for Saturn, while a tarabala changes overnight. Without it a Saturn verdict that reads identically for nine hundred days would sit under one date field beside a limb that turns over at dawn. */ timescale: 'hours' | 'days' | 'months' | 'years'; }; /** * Nakshatra the Moon occupies at sunrise, with the instant it ends. This is the sky-wide limb; for what it means to THIS native, read the tara array. */ nakshatra: { /** * nakshatra number in its own cycle, resolved at sunrise. */ number: number; /** * Name of the nakshatra running at sunrise. Canonical Sanskrit, so it stays safe to compare against in code. */ name: string; /** * ISO instant this nakshatra ends. Read from the same transition search POST /panchang/detailed publishes, never recomputed here, so the two endpoints cannot disagree about when the event happens. */ validTo: string; /** * The nakshatra that follows, so the rest of the day can be labelled without a second request. */ next: string; /** * How long this component holds one verdict. Present on every component because this reading joins two genres classical literature keeps in separate books: a gochara verdict lasts as long as the graha stays in a rashi, which is years for Saturn, while a tarabala changes overnight. Without it a Saturn verdict that reads identically for nine hundred days would sit under one date field beside a limb that turns over at dawn. */ timescale: 'hours' | 'days' | 'months' | 'years'; }; /** * Nitya yoga running at sunrise, with the instant it ends. The 27 yogas step through the combined longitude of the Sun and the Moon. */ yoga: { /** * yoga number in its own cycle, resolved at sunrise. */ number: number; /** * Name of the yoga running at sunrise. Canonical Sanskrit, so it stays safe to compare against in code. */ name: string; /** * ISO instant this yoga ends. Read from the same transition search POST /panchang/detailed publishes, never recomputed here, so the two endpoints cannot disagree about when the event happens. */ validTo: string; /** * The yoga that follows, so the rest of the day can be labelled without a second request. */ next: string; /** * How long this component holds one verdict. Present on every component because this reading joins two genres classical literature keeps in separate books: a gochara verdict lasts as long as the graha stays in a rashi, which is years for Saturn, while a tarabala changes overnight. Without it a Saturn verdict that reads identically for nine hundred days would sit under one date field beside a limb that turns over at dawn. */ timescale: 'hours' | 'days' | 'months' | 'years'; }; /** * Karana running at sunrise, with the instant it ends. A karana is half a tithi, which is why it is the fastest of the four limbs. */ karana: { /** * karana number in its own cycle, resolved at sunrise. */ number: number; /** * Name of the karana running at sunrise. Canonical Sanskrit, so it stays safe to compare against in code. */ name: string; /** * ISO instant this karana ends. Read from the same transition search POST /panchang/detailed publishes, never recomputed here, so the two endpoints cannot disagree about when the event happens. */ validTo: string; /** * The karana that follows, so the rest of the day can be labelled without a second request. */ next: string; /** * How long this component holds one verdict. Present on every component because this reading joins two genres classical literature keeps in separate books: a gochara verdict lasts as long as the graha stays in a rashi, which is years for Saturn, while a tarabala changes overnight. Without it a Saturn verdict that reads identically for nine hundred days would sit under one date field beside a limb that turns over at dawn. */ timescale: 'hours' | 'days' | 'months' | 'years'; }; }; /** * All nine transiting grahas, each with its four gate results and the ONE state they produced. The gates run in the order the sources give them: house from the natal Moon, then vedha, then the bindu gate, then the nullifiers of Phaladeepika XXVI.30 to XXVI.32. Obstruction is terminal, so a blocked transit is never rescued by the gates that follow it. */ grahas: Array<{ /** * Graha name, Sun through Ketu. Always English, whatever the lang parameter says, so it stays safe to compare against in code. */ graha: string; /** * Rashi this graha is transiting on the day being read. Always English. */ sign: string; /** * Sidereal longitude of the transiting graha in degrees, 0 to 360, Lahiri frame. */ longitude: number; /** * House this graha transits counted whole-sign and inclusively from the natal Moon rashi (Janma Rashi), so the Moon rashi itself is 1. This is the reference classical Gochara is reckoned in: Phaladeepika XXVI.1 opens the transit chapter by saying that of all the Lagnas only the Moon Lagna matters for transit results. A reading counted from the Lagna instead answers a different question and every verdict below would be wrong. */ houseFromMoon: number; /** * How long this component holds one verdict. Present on every component because this reading joins two genres classical literature keeps in separate books: a gochara verdict lasts as long as the graha stays in a rashi, which is years for Saturn, while a tarabala changes overnight. Without it a Saturn verdict that reads identically for nine hundred days would sit under one date field beside a limb that turns over at dawn. */ timescale: 'hours' | 'days' | 'months' | 'years'; /** * Gate 1. Whether houseFromMoon is on this graha classical favourable list (Phaladeepika XXVI.2). The baseline verdict, before vedha, bindus or the nullifiers have had their say. */ favourable: boolean; /** * Gate 1 evidence: the whole favourable list for this graha, so the baseline verdict can be checked in place without a second request or a table lookup. */ favourableHouses: Array; /** * Gate 2. The house whose occupation by another graha cancels this transit (Phaladeepika XXVI.3-8). Null when the transit is not favourable to begin with, since there is nothing for an obstruction to cancel. */ vedhaHouse: number | null; /** * Gate 2. Grahas actually standing in vedhaHouse, with the mutual exemptions already applied. Empty when nothing obstructs. A non-empty list makes the state "obstructed", which is a THIRD outcome rather than a smaller number: the texts cancel the promised good outright rather than discounting it. */ obstructedBy: Array; /** * Gate 2. Grahas that cannot obstruct this one however they transit, from the two mutual exemptions the texts name: the Sun and Saturn do not obstruct each other, and neither do the Moon and Mercury. */ vedhaExempt: Array; /** * Gate 3. Bindus this graha holds in the whole sign it is transiting, 0 to 8, or null for Rahu and Ketu, which have no Bhinnashtakavarga and therefore SKIP this gate entirely rather than scoring zero. The gate reads the number two ways: a favourable house carrying fewer than 4 bindus under delivers, and an unfavourable house carrying a strict majority of the eight contributors, 5 or more, is turned good by Phaladeepika XXVI.41. Exactly 4 fires neither rule, which is the literal reading of both phrasings rather than a rounding choice. WHOSE READING THE NUMBER IS, stated because generalising it is ours: B.V. Raman prints 4 once and prints it about the MOON, then generalises the PRINCIPLE to every graha in the next sentence without repeating any number, and Phaladeepika XXVI.41 is general across grahas and also states no number. Applying 4 to all nine bodies is RoxyAPI reading the general rule through the one worked example the author gave it, and it is not a universally stated classical threshold. */ binduCount: number | null; /** * Gochara Kaksha: the ashtakavarga-qualified reading of this transit. The sign says where a graha is, this says whether the exact stretch it currently occupies is one its own Bhinnashtakavarga supports, which is the classical way of refining a transit verdict from sign-level to under four degrees. */ kaksha: { /** * Kaksha number 1-8 within the current sign. Each sign divides into eight kakshas of 3 degrees 45 minutes, crossed in order, so this is how far through the sign the graha has travelled. */ number: number; /** * Graha ruling this kaksha. The eight lords run Saturn, Jupiter, Mars, Sun, Venus, Mercury, Moon, Lagna from the start of every sign, ordered by how long each takes to cross a sign. */ lord: string; /** * Degree within the sign where this kaksha begins (0, 3.75, 7.5 and so on). */ startDegree: number; /** * Degree within the sign where this kaksha ends. */ endDegree: number; /** * Whether this kaksha lord gave the transiting graha a bindu in the sign being transited, which is the Gochara Kaksha verdict: true reads as a favourable stretch of the transit, false as an unfavourable one. Null means the question does not apply rather than that the answer is no, because Rahu and Ketu have no Bhinnashtakavarga to read. Never render null as unfavourable. */ bindu: boolean | null; /** * Bindus the transiting graha holds in this whole sign, 0-8, or null for Rahu and Ketu. Context for the verdict, since the same kaksha reads differently in a sign worth 7 than in one worth 1. */ binduCount: number | null; }; /** * Gate 4. Dignity of the graha in the sign it is transiting, or null for Rahu and Ketu which have none. Feeds the Phaladeepika XXVI.31 shield ("exalted" or "own" does no harm in an untoward bhava) and the XXVI.32 weakness ("debilitated" or "enemy" voids a good transit). One of exalted, own, debilitated, enemy, neutral. */ dignity: 'exalted' | 'own' | 'debilitated' | 'enemy' | 'neutral' | null; /** * Gate 4. Whether the graha is combust at the transit moment, or null for the Sun and the two nodes where the question does not arise at all. Combustion voids a good transit under Phaladeepika XXVI.32 and aggravates a bad one. */ combust: boolean | null; /** * Gate 4. Transiting natural benefics casting graha drishti on this graha. Under Phaladeepika XXVI.30 a benefic sight on a BAD result is what voids it. Read as drishti from the other TRANSITING grahas, which is a school choice this endpoint makes and states: the sloka sits between the vedha rules and the rules about the transiting graha own condition. */ aspectedByBenefic: Array; /** * Gate 4. Transiting natural malefics casting graha drishti on this graha. A malefic sight on a GOOD result voids it under Phaladeepika XXVI.30. Rahu and Ketu never appear here: they cast no drishti in this package, which is its own documented school choice, although they can be aspected. */ aspectedByMalefic: Array; /** * Gate 4. Transiting natural enemies of this graha casting graha drishti on it. Phaladeepika XXVI.30 voids the result either way for an enemy sight, whichever direction the baseline verdict pointed. */ aspectedByEnemy: Array; /** * The single outcome the four gates produced for this graha, and the only field the score counts. "favourable" is the house list holding with nothing cancelling it, "underdelivered" is a favourable house below the bindu delivery floor, "obstructed" is vedha, "void" is an aspect, a dignity shield or a weakness emptying the result of effect, "aggravated" is the one compounding rule in the chapter, and "unfavourable" is a house that was never on the list. Canonical English machine values: every one is a classical outcome word rather than an invented label, which is why none carries a translated sibling. */ state: 'favourable' | 'underdelivered' | 'obstructed' | 'void' | 'aggravated' | 'unfavourable'; /** * The rule that decided the state, named so a verdict can be checked against its sloka without leaving the payload. */ stateSource: string; }>; /** * Tarabala for THIS native, as an array of windows rather than one value, because the Moon can change nakshatra inside a panchanga day and the reference panchangs print two windows when it does. Three windows happen and are returned when they do. One entry means the tara held all day. */ tara: Array<{ /** * ISO instant this tarabala window opens. */ validFrom: string; /** * ISO instant this tarabala window closes, which is when the Moon changes nakshatra. */ validTo: string; /** * How long this component holds one verdict. Present on every component because this reading joins two genres classical literature keeps in separate books: a gochara verdict lasts as long as the graha stays in a rashi, which is years for Saturn, while a tarabala changes overnight. Without it a Saturn verdict that reads identically for nine hundred days would sit under one date field beside a limb that turns over at dawn. */ timescale: 'hours' | 'days' | 'months' | 'years'; /** * Nakshatra the Moon occupies during this window. Canonical Sanskrit. */ moonNakshatra: string; /** * Tara number 1 to 9, counted inclusively from the Janma Nakshatra to the Moon nakshatra and folded by 9. */ number: number; /** * Name of the tara this native gets during this window, from the 9-tara cycle Janma through Parama Mitra. A Sanskrit proper noun and a canonical machine value, which is why the favourability is a separate field rather than something a caller has to infer from the word. */ name: 'Janma' | 'Sampat' | 'Vipat' | 'Kshema' | 'Pratyari' | 'Sadhaka' | 'Vadha' | 'Mitra' | 'Parama Mitra'; /** * Where this tara falls in the three-way classical reading. Taras 2, 4, 6, 8 and 9 are favourable, 3, 5 and 7 are not, and the 1st (Janma) is neither. */ quality: 'favourable' | 'unfavourable' | 'neutral'; }>; /** * Chandrabala for THIS native, windowed for the same reason as the tarabala: the Moon can change rashi inside the panchanga day. Ashtama Chandra is a separate flag on each window. */ chandrabala: Array<{ /** * ISO instant this chandrabala window opens. */ validFrom: string; /** * ISO instant this chandrabala window closes, which is when the Moon changes rashi. */ validTo: string; /** * How long this component holds one verdict. Present on every component because this reading joins two genres classical literature keeps in separate books: a gochara verdict lasts as long as the graha stays in a rashi, which is years for Saturn, while a tarabala changes overnight. Without it a Saturn verdict that reads identically for nine hundred days would sit under one date field beside a limb that turns over at dawn. */ timescale: 'hours' | 'days' | 'months' | 'years'; /** * Rashi the Moon occupies during this window. Always English. */ moonSign: string; /** * House the Moon rashi makes from the Janma Rashi, counted whole-sign and inclusively, so the Janma Rashi itself is 1. This is the number chandrabala is read off. */ houseFromMoon: number; /** * Whether the Moon stands in one of the rashis that give this native chandrabala during this window. */ favourable: boolean; /** * The Moon in the 8th from the Janma Rashi. Its OWN flag, printed beside chandrabala rather than folded into it, exactly as the reference panchangs print it. Folding it in would let a caller read one boolean and miss the warning the source deliberately separates. */ ashtamaChandra: boolean; }>; /** * The running Vimshottari chain at sunrise, outermost first, three levels deep. This is the frame the day is read inside, and it is also what the finance area reads the significators off. Empty for a chart whose cycle cannot be resolved. */ dasha: Array<{ /** * Which Vimshottari level this period is. Only mahadasha, antardasha, pratyantardasha are carried: the sookshma and prana lords turn over in hours and minutes, so embedding them would advertise a day-long cache lifetime over a value that is already stale. Use POST /dasha/current for those two. */ level: 'mahadasha' | 'antardasha' | 'pratyantardasha'; /** * Graha ruling this period. Always English. */ lord: string; /** * ISO instant this period begins. */ startDate: string; /** * ISO instant this period ends. */ endDate: string; /** * How long this component holds one verdict. Present on every component because this reading joins two genres classical literature keeps in separate books: a gochara verdict lasts as long as the graha stays in a rashi, which is years for Saturn, while a tarabala changes overnight. Without it a Saturn verdict that reads identically for nine hundred days would sit under one date field beside a limb that turns over at dawn. */ timescale: 'hours' | 'days' | 'months' | 'years'; }>; /** * Life areas carried as a TYPED closed set rather than an open map, so every generated SDK knows which keys exist. Finance ships alone in this version, because an area is a named classical house group with a citation and not a life category invented for a dropdown. Widening it later adds a key and breaks nothing. */ areas: { /** * The finance area: the positive house group 2, 5, 11 netted against the negative group 6, 8, 12, read off the lords of the running dasha, bhukti and antara, because that is the KP rule for when a matter fructifies, plus the natal basis the day is read against. ALWAYS AN OBJECT. Above latitude 66.56 the six netted members are null, because the Placidus cusps behind the significators have no solution there, while natal is still populated because it is a property of the birth chart and needs no cusps; the reading also still carries its gochara, panchanga and dasha and names the omission in degraded. The two house groups are Krishnamurti Paddhati practice, but the NET is a KP practitioner convention rather than a classical operation: the KP sources that carry these groups use them as a promise test and an avoidance test, never as arithmetic. The groups also vary by author, and TWO houses are live disagreements rather than one. The 6th: some KP authors place it on the POSITIVE side as service income and salary, the exact opposite of the assignment used here. The 5th: it is named as a speculative GAIN house in the same KP sources that elsewhere call it a negation house, reading it as the 12th from the 6th and therefore loss of earning capacity, and both readings appear in one publication. The 1st is treated as a negation house by some authors on the same logic, as the 12th from the 2nd, and is not on either side here. This is a six house net and it is NOT the focus=finance lens, which re-reads all twelve bhavas in money vocabulary and moves no number. The two are orthogonal and both ship. */ finance: { /** * Share of the running lords six-house connections that land on the positive group, 0 to 100, rounded. A COUNT, so positive and negative below reproduce it in one division: round(positive / (positive + negative) * 100). Zero when the running lords reach none of the six houses, which is an ABSENCE of connection rather than a negative verdict. Null above latitude 66.56, where the Placidus cusps the KP significators are read from have no solution: the question does not apply there rather than the answer being no, so never render it as zero or as a weak verdict. The natal block beside it is unaffected and still ships, and degraded names areas.finance.score. The two house groups are Krishnamurti Paddhati practice, but the NET is a KP practitioner convention rather than a classical operation: the KP sources that carry these groups use them as a promise test and an avoidance test, never as arithmetic. The groups also vary by author, and TWO houses are live disagreements rather than one. The 6th: some KP authors place it on the POSITIVE side as service income and salary, the exact opposite of the assignment used here. The 5th: it is named as a speculative GAIN house in the same KP sources that elsewhere call it a negation house, reading it as the 12th from the 6th and therefore loss of earning capacity, and both readings appear in one publication. The 1st is treated as a negation house by some authors on the same logic, as the 12th from the 2nd, and is not on either side here. This is a six house net and it is NOT the focus=finance lens, which re-reads all twelve bhavas in money vocabulary and moves no number. The two are orthogonal and both ship. */ score: number | null; /** * The band the finance score falls in, on the same ladder as the top-level verdict so the two can never disagree about what a word means: "very-strong" at 75 and above, "strong" at 50 and above, "moderate" at 25 and above, "weak" below 25. Null above latitude 66.56, where the Placidus cusps the KP significators are read from have no solution: the question does not apply there rather than the answer being no, so never render it as zero or as a weak verdict. The natal block beside it is unaffected and still ships, and degraded names areas.finance.score. */ band: 'very-strong' | 'strong' | 'moderate' | 'weak' | null; /** * How many connections land on the positive house group 2, 5, 11, which KP reads as accumulated wealth, speculation and gains. Null above latitude 66.56, where the Placidus cusps the KP significators are read from have no solution: the question does not apply there rather than the answer being no, so never render it as zero or as a weak verdict. The natal block beside it is unaffected and still ships, and degraded names areas.finance.score. */ positive: number | null; /** * How many connections land on the negative house group 6, 8, 12, which KP reads as debt, sudden loss and expenditure. Null above latitude 66.56, where the Placidus cusps the KP significators are read from have no solution: the question does not apply there rather than the answer being no, so never render it as zero or as a weak verdict. The natal block beside it is unaffected and still ships, and degraded names areas.finance.score. */ negative: number | null; /** * Every positive-group connection, strongest KP level first. These are the specific lord-to-house links the score is made of, so the number can be audited rather than trusted. Null above latitude 66.56, where the Placidus cusps the KP significators are read from have no solution: the question does not apply there rather than the answer being no, so never render it as zero or as a weak verdict. The natal block beside it is unaffected and still ships, and degraded names areas.finance.score. */ drivers: Array<{ /** * The running dasha lord making this connection. A lord holding two of the three levels is listed once per house rather than twice, so nothing here is a hidden weight. */ graha: string; /** * The finance house this lord reaches. One of the positive group 2, 5, 11 or the negative group 6, 8, 12. */ house: number; /** * Strongest KP significator level at which this lord reaches this house, 1 to 4. Level 1 is a planet in the constellation of the occupant, 2 the occupant, 3 a planet in the constellation of the house owner, 4 the house owner. Strongest level per house wins, which is step 1 of the published grading rule the dasha routes already use. */ level: number; /** * The KP letter for that level, on the standard A to D significator grading. A is the strongest connection. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Which of the running levels this graha rules. Carries the fact that one lord holds more than one level without letting it count twice. */ dashaLevels: Array<'mahadasha' | 'antardasha' | 'pratyantardasha'>; }> | null; /** * Every negative-group connection, strongest KP level first. Null above latitude 66.56, where the Placidus cusps the KP significators are read from have no solution: the question does not apply there rather than the answer being no, so never render it as zero or as a weak verdict. The natal block beside it is unaffected and still ships, and degraded names areas.finance.score. */ cautions: Array<{ /** * The running dasha lord making this connection. A lord holding two of the three levels is listed once per house rather than twice, so nothing here is a hidden weight. */ graha: string; /** * The finance house this lord reaches. One of the positive group 2, 5, 11 or the negative group 6, 8, 12. */ house: number; /** * Strongest KP significator level at which this lord reaches this house, 1 to 4. Level 1 is a planet in the constellation of the occupant, 2 the occupant, 3 a planet in the constellation of the house owner, 4 the house owner. Strongest level per house wins, which is step 1 of the published grading rule the dasha routes already use. */ level: number; /** * The KP letter for that level, on the standard A to D significator grading. A is the strongest connection. */ grade: 'A' | 'B' | 'C' | 'D'; /** * Which of the running levels this graha rules. Carries the fact that one lord holds more than one level without letting it count twice. */ dashaLevels: Array<'mahadasha' | 'antardasha' | 'pratyantardasha'>; }> | null; /** * The natal basis of this area: whether the chart is wealthy AT ALL, as the four classical wealth and poverty verdicts dhana, daridra, lakshmi, dhanamalika, each with the evidence that decided it. A PROPERTY OF THE BIRTH CHART AND NOT OF THE DAY, so it is the same block on every date this native is ever read for, which is exactly why it is CONTEXT rather than a term: it deliberately does not enter score, verdict, tally or evaluated, above or here. Folding a constant into a per-day number would shift every day by the identical amount, carrying no information into the only comparison those numbers support, and it would break the published closed form that makes the top-level score reproducible by hand from grahas alone. Read it as the standing question the day is being read against. The verdicts are the same ones POST /yoga/detect and POST /birth-chart return for this chart, computed in the Lahiri natal frame rather than in the KP-Newcomb frame the significators above use. PRESENT AT EVERY LATITUDE, including above the polar circle: these verdicts need only whole-sign houses from the Lagna, so nothing about them depends on the cusps the KP members above lose there. */ natal: Array<{ /** * Glossary id of the verdict, one of dhana, daridra, lakshmi, dhanamalika. Use it with GET /yoga/{id} for the full glossary entry, which carries the description and the classical result in every supported language. Canonical English, so it stays safe to switch on in code. */ id: string; /** * Classical Sanskrit name of the combination. Canonical whatever the lang parameter says, exactly as the yoga endpoints return it. */ name: string; /** * Which way a present verdict points, carried because three of the four are wealth combinations and Daridra is a poverty one, so present alone does not tell a client whether to read it as support or as pressure. Canonical English machine value. */ quality: 'Positive' | 'Negative' | 'Both'; /** * Whether the combination is on this chart. False means every rule in the family was evaluated and none held, which is a real answer rather than a missing one, and the evidence beside it names the full denominator. */ present: boolean; /** * Why the verdict reads the way it does: every rule that matched, named by its own glossary id and its verse, with the exact condition it matched on, then the scope of the family. This is what makes the verdict checkable against a text rather than a label to be trusted, and it is also where the two excluded rules are declared: daridra-8 and daridra-9 rest on a single authority and are barred from deciding a verdict, though both still ship through GET /yoga/{id}. English in every language, like the per-graha stateSource, because it is provenance rather than display copy. */ evidence: string; }>; }; }; /** * How much of the transiting sky supports this native today: supportive grahas divided by grahas evaluated, as a percentage, rounded. HAND REPRODUCIBLE FROM THIS RESPONSE ALONE, with no weights to publish and none to defend. STEP 1, count the grahas whose state is one of favourable; the tally array has that count already. STEP 2, divide by evaluated and round. Worked example: 2 supportive out of 9 evaluated scores round(2 / 9 * 100) = 22. The other states (underdelivered, obstructed, void, aggravated, unfavourable) count for nothing, because each of them is the tradition saying the promised good was reduced, cancelled or emptied. WHY IT IS A COUNT AND NOT A SUM: the tradition does not add these limbs up. Phaladeepika XXVI.41 makes a high bindu count an OVERRIDE that turns even the 6th, 8th and 12th good, and XXVI.30 to XXVI.32 make aspect, dignity and combustion NULLIFIERS, so a weighted sum would be a different mathematical object and could not carry those citations. The GATES are classical, the COUNTING is the RoxyAPI convention, and this sentence is where we say which is which. HOW TO READ THE NUMBER: it runs low by construction and that is the correct answer rather than a defect. Nine bodies casting drishti means almost every transiting graha is aspected by something, and the sloka voids the result when it is, so most days land in the bottom half and a high score is rare and therefore meaningful. Read it as a rare-high scale, not as a mark out of 100: 22 is an ordinary day, not a failing one. And it measures SUPPORT, never OUTCOME. It says how much of the sky backs this native today, never whether the day is good for a particular matter, which depends on the matter being judged. */ score: number; /** * The band the score falls in: "very-strong" at 75 and above, "strong" at 50 and above, "moderate" at 25 and above, "weak" below 25. The four WORDS are the shipped KP significator band words, reused so nothing new has to be translated. The EDGES are the RoxyAPI convention and are quartiles, because no authority bands a day and quartiles are the least arbitrary division of a percentage into four named steps. Read it with the same expectation the score carries: the gates cancel far more often than they deliver, so the lower bands are the common case. */ verdict: 'very-strong' | 'strong' | 'moderate' | 'weak'; /** * The full per-state count, always all six states including the zeros. This is the WHOLE input to the score, which is what makes the number reproducible by hand, and it is also what lets a caller who reads the states differently compute their own figure from this response instead of asking for a second one. */ tally: Array<{ /** * One of the six outcomes a transiting graha can reach. */ state: 'favourable' | 'underdelivered' | 'obstructed' | 'void' | 'aggravated' | 'unfavourable'; /** * How many of the evaluated grahas reached that state. */ count: number; }>; /** * How many grahas were put through the gates, which is the denominator of the score. Rahu and Ketu are included: they skip the bindu gate because they have no Bhinnashtakavarga, and a skipped gate is not a failed one, so they still reach a state through the other three. */ evaluated: number; /** * Components this request could not supply, named rather than silently defaulted. Empty on an ordinary reading. A polar chart degrades through here instead of failing, so the caller still gets the gochara, the panchanga, the dasha and the natal basis of the finance area, and is told exactly what is missing. */ degraded: Array<{ /** * Which part of the reading this location or date could not supply. "areas.finance.score" names the KP net by the member it is read through: the finance area itself always ships and its natal block is always populated, and it is the six netted members that are null. */ component: 'dayStart' | 'dayEnd' | 'areas.finance.score'; /** * Why it could not: "sun-does-not-rise" for a day with no sunrise at these coordinates, "polar-latitude" above 66.56 degrees where the Placidus cusps have no solution. */ reason: 'sun-does-not-rise' | 'polar-latitude'; }>; /** * Significations of each of the twelve bhavas (houses), keyed by house number 1 to 12, as short keywords. Bhava 1 is the Lagna (self, body, vitality), 2 wealth and speech, 4 home and mother, 7 marriage and partnership, 10 career and status, 11 gains. Use it to label the house numbers returned elsewhere in the response: a Vimshottari dasha period signifying houses 2, 7 and 8, or a KP significator carrying houses 11 and 6, becomes readable text without a separate lookup call. Returned once per response rather than repeated per period, and localized by the lang query parameter alongside every other interpretation field. */ houseThemes: { [key: string]: Array; }; /** * Which signification vocabulary produced the houseThemes keywords in this response, echoing the focus query parameter. Always present, and "general" when the parameter was omitted. Read it to label a rendered house legend, or to tell two cached responses apart when only one asked for the finance lens. */ focus: 'general' | 'finance'; }; }; export type GetVedicDailyReadingResponse = GetVedicDailyReadingResponses[keyof GetVedicDailyReadingResponses]; export type GetBasicPanchangData = { body?: { /** * Date in YYYY-MM-DD format. Panchang elements (Tithi, Nakshatra, Yoga, Karana) are calculated for this date. */ date: string; /** * Time in HH:MM:SS format (24-hour). Determines the exact Moon and Sun positions for tithi and nakshatra calculation. */ time: string; /** * Observer latitude in decimal degrees. Determines sunrise/sunset times which define the Vara (weekday) and muhurta boundaries. */ latitude: number; /** * Observer longitude in decimal degrees. Affects local time calculations for sunrise/sunset-dependent panchang elements. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Defaults to 5.5 (IST). */ timezone?: number | string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/panchang/basic'; }; export type GetBasicPanchangErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetBasicPanchangError = GetBasicPanchangErrors[keyof GetBasicPanchangErrors]; export type GetBasicPanchangResponses = { /** * Basic panchang with all five limbs (Tithi, Nakshatra, Yoga, Karana, Vara) including lunar phase, paksha, ruling planets, deities, and interpretive characteristics. */ 200: { /** * Lunar day (tithi) information with interpretations. Central panchang element for determining auspicious timings. */ tithi: { /** * Tithi number (1-30). 1-15 are Shukla Paksha (waxing), 16-30 are Krishna Paksha (waning). Purnima is 15, Amavasya is 30. */ number: number; /** * Sanskrit name of the tithi (lunar day). One of 30 tithis in the lunar month cycle. */ name: string; /** * Lunar fortnight: Shukla (waxing, bright half) or Krishna (waning, dark half). */ paksha: 'Shukla' | 'Krishna'; /** * Percentage of the current tithi elapsed (0-100). Useful for determining tithi strength and transition proximity. */ percent: number; /** * Presiding deity of this tithi from Vedic tradition. */ deity?: string; /** * Planetary ruler of this tithi. Influences the day energy and activities. */ rulingPlanet?: string; /** * Elemental quality of this tithi (Fire, Earth, Air, Water, Ether). */ element?: string; }; /** * Nakshatra (lunar mansion) information with interpretations */ nakshatra: { /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. Each nakshatra spans 13 degrees 20 minutes. */ number: number; /** * Sanskrit name of the nakshatra (lunar mansion). One of 27 nakshatras spanning the zodiac belt. */ name: string; /** * Planetary ruler of this nakshatra. Determines Vimshottari dasha lord and influences nakshatra characteristics. */ lord: string; /** * Pada (quarter, 1-4) of the nakshatra. Each nakshatra has 4 padas spanning 3 degrees 20 minutes each. Determines the navamsha sign and fine-tunes nakshatra predictions. */ pada: number; /** * Presiding deity of this nakshatra from Vedic mythology. Influences spiritual qualities and karmic themes. */ deity?: string; /** * Traditional symbol representing this nakshatra. Reflects core energy and life themes. */ symbol?: string; /** * Personality traits and behavioral tendencies when the Moon occupies this nakshatra. Useful for daily panchang readings. */ characteristics?: string; }; /** * Nitya Yoga information. Yoga is the third panchang element, derived from combined Sun-Moon longitude. */ yoga: { /** * Nitya Yoga index (1-27). Calculated from the sum of Sun and Moon sidereal longitudes divided by 13 degrees 20 minutes. */ number: number; /** * Sanskrit name of the Nitya Yoga. One of 27 yogas formed by combined Sun-Moon motion, each with distinct auspiciousness. */ name: string; /** * Characteristics and auspiciousness of this yoga for activity planning. */ characteristics?: string; }; /** * Karana (half-tithi) information. Fourth panchang element, changes twice per tithi. */ karana: { /** * Karana index. There are 11 karanas total (4 fixed + 7 movable) cycling through 60 half-tithis per lunar month. */ number: number; /** * Sanskrit name of the karana. 7 movable karanas (Bava through Naga) repeat 8 times, plus 4 fixed karanas. */ name: string; /** * Karana type: Movable (repeating, generally auspicious) or Fixed (occur once per month). */ type?: string; /** * Activity suitability and characteristics of this karana for muhurta selection. */ characteristics?: string; }; /** * Sidereal longitude of the Sun in degrees (0-360). Used for tithi and yoga calculations. */ sunLongitude: number; /** * Sidereal longitude of the Moon in degrees (0-360). Moon moves ~13 degrees per day through the nakshatras. */ moonLongitude: number; }; }; export type GetBasicPanchangResponse = GetBasicPanchangResponses[keyof GetBasicPanchangResponses]; export type GetDetailedPanchangData = { body?: { /** * Date in YYYY-MM-DD format. A single-digit month or day is accepted and zero-padded (2026-3-5 becomes 2026-03-05). Impossible calendar dates are rejected. */ date: string; /** * Observer latitude in decimal degrees. Determines sunrise and sunset times which define day/night boundaries for muhurta calculations. */ latitude: number; /** * Observer longitude in decimal degrees. Affects local time calculations for sunrise, sunset, and muhurta period boundaries. */ longitude: number; /** * Timezone offset from UTC in decimal hours, for example -5 for New York or 9 for Tokyo. Send the offset that matches the coordinates: sunrise, sunset and every muhurta boundary are found by searching forward from local midnight, so the default anchors the search to an Indian day. Omitting it for a location outside IST returns a correctly ordered set of periods for the wrong window, shifted by the difference between 5.5 and the real offset. Defaults to 5.5 (IST). */ timezone?: number | string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/panchang/detailed'; }; export type GetDetailedPanchangErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetDetailedPanchangError = GetDetailedPanchangErrors[keyof GetDetailedPanchangErrors]; export type GetDetailedPanchangResponses = { /** * Full daily panchang with five limbs, sunrise/sunset/moonrise/moonset times, inauspicious periods (Rahu Kaal, Yamaganda, Gulika Kaal), auspicious muhurtas (Abhijit, Brahma), current hora, panchang transitions, and panchaka/bhadra/varjyam/amrit kalam analysis. */ 200: { /** * Date for which panchang is calculated. */ date: string; /** * Location coordinates used for all time-based calculations. */ location: { /** * Observer latitude used for sunrise/sunset calculation. */ latitude: number; /** * Observer longitude used for sunrise/sunset calculation. */ longitude: number; /** * Timezone offset from UTC in hours. */ timezone: number; }; /** * Vara (weekday) information based on Hindu sunrise calendar. */ vara: { /** * Weekday name in English. Vara begins at local sunrise, not at midnight, so a time before sunrise belongs to the previous vara. */ name: string; /** * Vara name transliterated from Sanskrit: Ravivara, Somavara, Mangalavara, Budhavara, Guruvara, Shukravara, Shanivara. Use this rather than name for a Jyotish-facing reading, since it is the form the classical texts use and it does not change with the lang parameter. */ sanskritName: string; /** * Ruling planet of the day (Vara lord). Influences day-level auspiciousness. */ lord: string; }; /** * Local sunrise in the requested timezone as YYYY-MM-DDTHH:MM:SS, with no zone suffix. Marks the start of the Hindu day. */ sunrise: string; /** * Local sunset in the requested timezone as YYYY-MM-DDTHH:MM:SS, with no zone suffix. Marks the transition to night muhurtas. */ sunset: string; /** * Moonrise time in the requested timezone. Can be null if Moon does not rise on this date. */ moonrise: string | null; /** * Moonset time in the requested timezone. Can be null if Moon does not set on this date. */ moonset: string | null; /** * Moon sign (Chandra Rashi) at sunrise. Central to Vedic astrology. determines daily emotional tone, Chandrabalam, and Tarabalam. */ moonSign: { /** * Moon rashi (sidereal zodiac sign) at sunrise. */ name: string; /** * Sanskrit name of the Moon rashi. */ sanskritName: string; }; /** * Sun sign (Surya Rashi) at sunrise. Determines the solar month (Saura Masa) in the Hindu calendar. Changes approximately once a month (Sankranti). */ sunSign: { /** * Sun rashi (sidereal zodiac sign) at sunrise. */ name: string; /** * Sanskrit name of the Sun rashi. */ sanskritName: string; }; /** * Sun nakshatra at sunrise. The Sun spends approximately 13-14 days in each nakshatra. Used for Surya-based muhurta and festival calculations. */ sunNakshatra: { /** * Sun nakshatra number (1-27). */ number: number; /** * Name of the nakshatra the Sun occupies. */ name: string; /** * Ruling planet (lord) of the Sun nakshatra. */ lord: string; /** * Pada (quarter) of the Sun nakshatra. */ pada: number; }; /** * Lunar day (tithi) information with interpretations. Central panchang element for determining auspicious timings. */ tithi: { /** * Tithi number (1-30). 1-15 are Shukla Paksha (waxing), 16-30 are Krishna Paksha (waning). Purnima is 15, Amavasya is 30. */ number: number; /** * Sanskrit name of the tithi (lunar day). One of 30 tithis in the lunar month cycle. */ name: string; /** * Lunar fortnight: Shukla (waxing, bright half) or Krishna (waning, dark half). */ paksha: 'Shukla' | 'Krishna'; /** * Percentage of the current tithi elapsed (0-100). Useful for determining tithi strength and transition proximity. */ percent: number; /** * Presiding deity of this tithi from Vedic tradition. */ deity?: string; /** * Planetary ruler of this tithi. Influences the day energy and activities. */ rulingPlanet?: string; /** * Elemental quality of this tithi (Fire, Earth, Air, Water, Ether). */ element?: string; }; /** * Nakshatra (lunar mansion) information with interpretations */ nakshatra: { /** * Nakshatra index (1-27) in the zodiac sequence starting from Ashwini. Each nakshatra spans 13 degrees 20 minutes. */ number: number; /** * Sanskrit name of the nakshatra (lunar mansion). One of 27 nakshatras spanning the zodiac belt. */ name: string; /** * Planetary ruler of this nakshatra. Determines Vimshottari dasha lord and influences nakshatra characteristics. */ lord: string; /** * Pada (quarter, 1-4) of the nakshatra. Each nakshatra has 4 padas spanning 3 degrees 20 minutes each. Determines the navamsha sign and fine-tunes nakshatra predictions. */ pada: number; /** * Presiding deity of this nakshatra from Vedic mythology. Influences spiritual qualities and karmic themes. */ deity?: string; /** * Traditional symbol representing this nakshatra. Reflects core energy and life themes. */ symbol?: string; /** * Personality traits and behavioral tendencies when the Moon occupies this nakshatra. Useful for daily panchang readings. */ characteristics?: string; }; /** * Nitya Yoga information. Yoga is the third panchang element, derived from combined Sun-Moon longitude. */ yoga: { /** * Nitya Yoga index (1-27). Calculated from the sum of Sun and Moon sidereal longitudes divided by 13 degrees 20 minutes. */ number: number; /** * Sanskrit name of the Nitya Yoga. One of 27 yogas formed by combined Sun-Moon motion, each with distinct auspiciousness. */ name: string; /** * Characteristics and auspiciousness of this yoga for activity planning. */ characteristics?: string; }; /** * Karana (half-tithi) information. Fourth panchang element, changes twice per tithi. */ karana: { /** * Karana index. There are 11 karanas total (4 fixed + 7 movable) cycling through 60 half-tithis per lunar month. */ number: number; /** * Sanskrit name of the karana. 7 movable karanas (Bava through Naga) repeat 8 times, plus 4 fixed karanas. */ name: string; /** * Karana type: Movable (repeating, generally auspicious) or Fixed (occur once per month). */ type?: string; /** * Activity suitability and characteristics of this karana for muhurta selection. */ characteristics?: string; }; /** * Current planetary hora. Used for electional astrology and muhurta selection. */ hora: { /** * Planet ruling the current hora (planetary hour). Each hora lasts ~1 hour. */ current: string; /** * Hora number within the day sequence (1-24). */ number: number; /** * Start time of the current hora, as local civil time in the requested timezone offset. The first hora of any day begins at local sunrise, so this equals the sunrise field when the hora number is 1. */ start: string; /** * End time of the current hora, as local civil time in the requested timezone offset. Day horas and night horas have different lengths, so a hora is only approximately 60 minutes. */ end: string; }; /** * Rahu Kaal, inauspicious period ruled by Rahu. Avoid starting new ventures. Calculated from sunrise duration divided into 8 parts. */ rahuKaal: { /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; }; /** * Yamaganda, inauspicious period ruled by Yama (lord of death). Avoid important activities. */ yamaganda: { /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; }; /** * Gulika Kaal, inauspicious period ruled by Saturn son Gulika. Considered harmful for initiating work. */ gulika: { /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; }; /** * Abhijit Muhurta (Abhijit Muhurat), the most auspicious ~48-minute window around solar noon, the 8th of 15 day muhurtas. Ideal for starting new ventures, signing contracts, and performing rituals when no other shubh muhurat is available. Null on Wednesdays because Abhijit coincides with Dur Muhurta on that weekday per Muhurta Chintamani. */ abhijitMuhurta: { /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; } | null; /** * Brahma Muhurta, sacred pre-dawn period approximately 96 minutes before sunrise (14th of 15 night muhurtas). Considered the best time for meditation, mantra japa, Vedic study, and spiritual sadhana. Referenced in Ashtanga Hridaya and Dharmashastra texts. */ brahmaMuhurta: { /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; }; /** * Vijaya Muhurta (Vijay Muhurat), the 11th of 15 day muhurtas between sunrise and sunset. Auspicious for journeys, legal proceedings, competitions, warfare, and any activity requiring victory or success. Used in electional astrology (muhurta shastra) for timing important undertakings. */ vijayaMuhurta: { /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; }; /** * Nishita Muhurta (Nishith Kaal), the 8th of 15 night muhurtas from sunset to next sunrise, occurring around midnight. Sacred period for worship of Lord Shiva, especially on Maha Shivaratri. Also significant for Janmashtami midnight celebrations and tantric sadhana. */ nishitaMuhurta: { /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; }; /** * Godhuli Muhurta (cow dust time), 12 minutes before sunset to 12 minutes after sunset. Universally auspicious for any activity, especially marriages and grihapravesha. No blemish from tithi, vara, nakshatra, karana, or yoga applies during Godhuli. Null only in polar regions where sun does not set. */ godhuliMuhurta: { /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; } | null; /** * Pratah Sandhya, morning twilight junction period for Sandhyavandanam prayer. Spans 3 night ghatis before sunrise to sunrise. Duration varies by location and season based on ratrimana (night duration). One of the three daily Sandhya prayer times prescribed in Dharmashastra. */ pratahSandhya: { /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; } | null; /** * Sayahna Sandhya, evening twilight junction period for Sandhyavandanam prayer. Spans sunset to 3 night ghatis after sunset. Duration varies by location and season based on ratrimana (night duration). One of the three daily Sandhya prayer times prescribed in Dharmashastra. */ sayahnaSandhya: { /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; } | null; /** * Dur Muhurta (Dur Muhurtam), inauspicious muhurta periods determined by the weekday. The daytime is divided into 15 muhurtas from sunrise to sunset. Specific muhurta numbers are inauspicious each weekday per Muhurta Chintamani. Each period lasts ~48 minutes. Most days have 2 Dur Muhurtas, Wednesday and Sunday have 1. Avoid initiating important activities during these periods. */ durMuhurta: Array<{ /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; }>; /** * Varjyam (Thyajyam, Vishghati, Nakshatra Thyajyam), inauspicious ~96-minute period based on Moon transit through specific ghati fractions within the current nakshatra. Each of the 27 nakshatras has a fixed Varjyam window measured in ghatikas (1 ghati = 24 minutes). Avoid starting new ventures, travel, or auspicious ceremonies during Varjyam. Usually 1-2 periods per panchang day. */ varjyam: Array<{ /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; }>; /** * Amrit Kalam (Amrit Ghati, Amrita Yoga), the most auspicious ~96-minute period based on Moon transit through specific ghati fractions within the current nakshatra. Each of the 27 nakshatras has a fixed Amrit window. Activities initiated during Amrit Kalam are believed to yield excellent, lasting results. Highly recommended for muhurta selection when other auspicious yogas are absent. Usually 1-2 periods per panchang day. */ amritKalam: Array<{ /** * Period start time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Timezone-adjusted based on the input timezone offset. */ end: string; }>; /** * Chandrabalam (Moon strength). indicates auspiciousness of Moon transit for each birth rashi. Essential for muhurta selection in Vedic electional astrology. */ chandrabalam: { /** * Rashis (zodiac signs) for which Moon transit is favorable today. Chandrabalam is positive when Moon transits 1st, 3rd, 6th, 7th, 10th, or 11th house from birth rashi. */ favorableRashis: Array; /** * Rashi for which Moon is in Ashtama (8th house) position. highly inauspicious. Natives of this rashi should avoid important activities. */ ashtamaChandraRashi: string; }; /** * Tarabalam (Star strength). based on the 9-Tara nakshatra cycle. Determines favorability of Moon nakshatra transit relative to each of the 27 birth nakshatras. */ tarabalam: { /** * Birth nakshatras with favorable Tarabalam based on Moon nakshatra transit. Derived from the 9-Tara system. taras Sampat, Kshema, Sadhaka, Mitra, and Parama Mitra are favorable. */ favorableNakshatras: Array; /** * Birth nakshatras with unfavorable Tarabalam (Vipat, Pratyari, Vadha taras). Natives of these birth nakshatras should exercise caution. */ unfavorableNakshatras: Array; }; /** * Panchaka, the inauspicious ~5-day window while the Moon transits the last five nakshatras (Dhanishta 3rd pada through Revati, 300 to 360 degrees sidereal). The dosha type depends on the weekday it begins; startsAt and endsAt report the period in force at sunrise or beginning later this day. Avoid major activities during Panchaka. */ panchaka: { /** * True when Panchaka is in effect on this date, whether it is already running at sunrise or begins later in the day, in which case startsAt and endsAt give the window. False only when no Panchaka touches this date. */ active: boolean; /** * Panchaka dosha, set by the weekday the period BEGINS (not the nakshatra): Roga (Sunday, disease), Raja (Monday, government), Agni (Tuesday, fire), Chora (Friday, theft), Mrityu (Saturday, death). Null when Panchaka begins on Wednesday or Thursday (no dosha) or when no Panchaka touches this date. */ type: string | null; /** * When the Panchaka period starts (Moon enters 300 degrees, Dhanishta 3rd pada). May predate this date when Panchaka is already running. Null when no Panchaka is in force or begins on this date. In requested timezone. */ startsAt: string | null; /** * When the Panchaka period ends (Moon exits Revati at 360 degrees), about five days after it starts. Null when no Panchaka. In requested timezone. */ endsAt: string | null; }; /** * Bhadra (Vishti Karana), the 7th movable karana, avoided for all auspicious activities. Bhadra recurs roughly every 3 to 5 days and lasts about half a tithi. active is true whenever a Bhadra is attributed to this date; startsAt and endsAt give the window, which may end on the next calendar day. */ bhadra: { /** * True when a Bhadra (Vishti Karana) occurs on this date, in which case startsAt and endsAt give its window. False only when no Bhadra begins on this date. */ active: boolean; /** * When the Bhadra (Vishti) period that begins on this date starts. Null when no Bhadra begins on this date. In requested timezone. */ startsAt: string | null; /** * When the Bhadra (Vishti) period that begins on this date ends. May fall on the next calendar day. Null when no Bhadra begins on this date. In requested timezone. */ endsAt: string | null; }; /** * Panchang element transition times. exact timing of when each element (tithi, yoga, karana, nakshatra, Moon sign) changes. Calculated using binary search for ~1 minute precision. Essential for precise muhurta determination and panchang calendars. */ transitions: { /** * Tithi (lunar day) transition timing: when the current tithi ends and the next one begins. */ tithi: { /** * ISO 8601 UTC time when the current tithi ends. Precise to ~1 minute via binary search. */ endsAt: string; /** * Name of the next tithi that begins after the transition. */ next: string; }; /** * Nitya Yoga transition timing: when the current yoga period ends. Based on combined Sun-Moon motion. */ yoga: { /** * ISO 8601 UTC time when the current yoga ends. */ endsAt: string; /** * Name of the next yoga. */ next: string; }; /** * Karana (half-tithi) transition. karanas change twice per tithi. Important for muhurta timing. */ karana: { /** * ISO 8601 UTC time when the current karana ends. */ endsAt: string; /** * Name of the next karana (half-tithi). */ next: string; }; /** * Nakshatra (lunar mansion) transition timing: when Moon moves to the next nakshatra. Critical for muhurta and Tarabalam calculations. */ nakshatra: { /** * ISO 8601 UTC time when the Moon leaves the current nakshatra. */ endsAt: string; /** * Name of the next nakshatra the Moon will enter. */ next: string; /** * Pada (quarter, 1-4) of the next nakshatra. Each nakshatra has 4 padas spanning 3 degrees 20 minutes each. */ nextPada: number; }; /** * Moon sign (Chandra rashi) transition, when Moon changes zodiac sign. Affects Chandrabalam, Tarabalam, and daily horoscope predictions. */ moonSign: { /** * Current Moon rashi (zodiac sign). */ current: string; /** * ISO 8601 UTC time when Moon enters the next rashi. Moon changes sign approximately every 2.25 days. */ changesAt: string; /** * Next rashi the Moon will enter. */ next: string; }; }; }; }; export type GetDetailedPanchangResponse = GetDetailedPanchangResponses[keyof GetDetailedPanchangResponses]; export type GetChoghadiyaData = { body?: { /** * Date in YYYY-MM-DD format. A single-digit month or day is accepted and zero-padded (2026-3-5 becomes 2026-03-05). Impossible calendar dates are rejected. */ date: string; /** * Observer latitude in decimal degrees. Determines sunrise and sunset times which define day/night boundaries for muhurta calculations. */ latitude: number; /** * Observer longitude in decimal degrees. Affects local time calculations for sunrise, sunset, and muhurta period boundaries. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Used for accurate sunrise/sunset calculation and output time formatting. Essential for correct Choghadiya periods outside IST. Defaults to 5.5 (IST). */ timezone?: number | string; }; path?: never; query?: never; url: '/vedic-astrology/panchang/choghadiya'; }; export type GetChoghadiyaErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetChoghadiyaError = GetChoghadiyaErrors[keyof GetChoghadiyaErrors]; export type GetChoghadiyaResponses = { /** * 8 daytime and 8 nighttime Choghadiya muhurta periods with names, ruling planets, auspiciousness ratings (Good/Bad), and exact start/end times based on sunrise and sunset. */ 200: { /** * Calendar date the choghadiya muhurta table was computed for, YYYY-MM-DD, echoed back from the request. The day periods run from that date sunrise to its sunset, and the night periods run on to the next sunrise. */ date: string; /** * 8 daytime choghadiya periods (sunrise to sunset) */ dayChoghadiya: Array<{ /** * Choghadiya muhurta name. Auspicious: Amrit (Moon), Shubh (Jupiter), Labh (Mercury), Char (Venus). Inauspicious: Udveg (Sun), Rog (Mars), Kaal (Saturn). */ name: 'Udveg' | 'Amrit' | 'Rog' | 'Labh' | 'Shubh' | 'Char' | 'Kaal'; /** * Ruling planet of this Choghadiya period. Planet determines the quality and suitability of activities during this muhurta. */ lord: string; /** * Auspiciousness of this period. Good periods (Amrit, Shubh, Labh, Char) are suitable for important activities. Bad periods (Udveg, Rog, Kaal) should be avoided. */ effect: 'Good' | 'Bad'; /** * Period start time in ISO 8601 format. Timezone-adjusted based on input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Each Choghadiya period is one-eighth of the day or night duration. */ end: string; }>; /** * 8 nighttime choghadiya periods (sunset to next sunrise) */ nightChoghadiya: Array<{ /** * Choghadiya muhurta name. Auspicious: Amrit (Moon), Shubh (Jupiter), Labh (Mercury), Char (Venus). Inauspicious: Udveg (Sun), Rog (Mars), Kaal (Saturn). */ name: 'Udveg' | 'Amrit' | 'Rog' | 'Labh' | 'Shubh' | 'Char' | 'Kaal'; /** * Ruling planet of this Choghadiya period. Planet determines the quality and suitability of activities during this muhurta. */ lord: string; /** * Auspiciousness of this period. Good periods (Amrit, Shubh, Labh, Char) are suitable for important activities. Bad periods (Udveg, Rog, Kaal) should be avoided. */ effect: 'Good' | 'Bad'; /** * Period start time in ISO 8601 format. Timezone-adjusted based on input timezone offset. */ start: string; /** * Period end time in ISO 8601 format. Each Choghadiya period is one-eighth of the day or night duration. */ end: string; }>; }; }; export type GetChoghadiyaResponse = GetChoghadiyaResponses[keyof GetChoghadiyaResponses]; export type GetHoraData = { body?: { /** * Date in YYYY-MM-DD format. A single-digit month or day is accepted and zero-padded (2026-3-5 becomes 2026-03-05). Impossible calendar dates are rejected. */ date: string; /** * Observer latitude in decimal degrees. Determines sunrise and sunset times which define day/night boundaries for muhurta calculations. */ latitude: number; /** * Observer longitude in decimal degrees. Affects local time calculations for sunrise, sunset, and muhurta period boundaries. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Used for accurate sunrise/sunset calculation and output time formatting. Essential for correct Hora periods outside IST. Defaults to 5.5 (IST). */ timezone?: number | string; }; path?: never; query?: never; url: '/vedic-astrology/panchang/hora'; }; export type GetHoraErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetHoraError = GetHoraErrors[keyof GetHoraErrors]; export type GetHoraResponses = { /** * 12 daytime and 12 nighttime Hora (planetary hour) periods with ruling planet, sequence number, and exact start/end times based on sunrise and sunset. */ 200: { /** * Date for which hora periods were calculated. */ date: string; /** * 12 daytime hora periods from sunrise to sunset. Duration varies by season. */ dayHoras: Array<{ /** * Ruling planet of this hora period. Follows the Chaldean planetary order: Sun, Venus, Mercury, Moon, Saturn, Jupiter, Mars. */ planet: string; /** * Hora period number within the day or night segment (1-12). */ number: number; /** * Start time of the hora period in ISO 8601 format. */ start: string; /** * End time of the hora period in ISO 8601 format. */ end: string; }>; /** * 12 nighttime hora periods from sunset to next sunrise. Duration varies by season. */ nightHoras: Array<{ /** * Ruling planet of this hora period. Follows the Chaldean planetary order: Sun, Venus, Mercury, Moon, Saturn, Jupiter, Mars. */ planet: string; /** * Hora period number within the day or night segment (1-12). */ number: number; /** * Start time of the hora period in ISO 8601 format. */ start: string; /** * End time of the hora period in ISO 8601 format. */ end: string; }>; }; }; export type GetHoraResponse = GetHoraResponses[keyof GetHoraResponses]; export type CheckManglikDoshaData = { body?: ManglikRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/dosha/manglik'; }; export type CheckManglikDoshaErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CheckManglikDoshaError = CheckManglikDoshaErrors[keyof CheckManglikDoshaErrors]; export type CheckManglikDoshaResponses = { /** * Manglik dosha detection result with severity, Mars house placement, cancellation exceptions, traditional remedies, and effects on marriage and personality. */ 200: ManglikResponse; }; export type CheckManglikDoshaResponse = CheckManglikDoshaResponses[keyof CheckManglikDoshaResponses]; export type CheckKalsarpaDoshaData = { body?: KalsarpaRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/dosha/kalsarpa'; }; export type CheckKalsarpaDoshaErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CheckKalsarpaDoshaError = CheckKalsarpaDoshaErrors[keyof CheckKalsarpaDoshaErrors]; export type CheckKalsarpaDoshaResponses = { /** * Kalsarpa dosha detection result with type identification (1 of 12 types), severity, Rahu-Ketu axis details, traditional remedies, and effects on career, health, and relationships. */ 200: KalsarpaResponse; }; export type CheckKalsarpaDoshaResponse = CheckKalsarpaDoshaResponses[keyof CheckKalsarpaDoshaResponses]; export type CheckSadhesatiData = { body?: SadhesatiRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/dosha/sadhesati'; }; export type CheckSadhesatiErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CheckSadhesatiError = CheckSadhesatiErrors[keyof CheckSadhesatiErrors]; export type CheckSadhesatiResponses = { /** * Sade Sati detection result with current phase (Rising/Peak/Setting), Saturn transit position relative to natal Moon, severity, traditional Shani remedies, and phase-specific effects. */ 200: SadhesatiResponse; }; export type CheckSadhesatiResponse = CheckSadhesatiResponses[keyof CheckSadhesatiResponses]; export type ListYogasData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Filter the catalog to one Nabhasa family: asraya (3), dala (2), akriti (20) or sankhya (7). Omit for the full catalog. `classical` is accepted but matches nothing here, because it is a detection-verdict value for single-combination yogas rather than a catalog grouping. */ family?: 'classical' | 'asraya' | 'dala' | 'akriti' | 'sankhya'; }; url: '/vedic-astrology/yoga'; }; export type ListYogasErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListYogasError = ListYogasErrors[keyof ListYogasErrors]; export type ListYogasResponses = { /** * List of all yogas (basic info) */ 200: { /** * Array of planetary yogas with basic identifiers, narrowed by `family` when that filter is supplied. Use GET /yoga/{id} for formation rules, effects, and quality classification. */ yogas: Array<{ /** * Unique yoga identifier in lowercase kebab-case. Use this to fetch full details via GET /yoga/{id}. */ id: string; /** * Traditional Sanskrit name of the planetary yoga combination. */ name: string; /** * Nabhasa family, present only on the 32 Nabhasa distribution yogas and absent on every other catalog row. Never translated, so it groups identically under any lang. */ family?: 'classical' | 'asraya' | 'dala' | 'akriti' | 'sankhya'; }>; /** * Number of yogas in this response, which is the filtered count when `family` is supplied and the full catalog size otherwise. Includes Raj Yogas, Dhan Yogas, Pancha Mahapurusha Yogas, Nabhasa Yogas, and more. */ total: number; }; }; export type ListYogasResponse = ListYogasResponses[keyof ListYogasResponses]; export type GetYogaData = { body?: never; path: { /** * Yoga identifier (lowercase, hyphenated) */ id: 'gajakesari' | 'sunapha' | 'anapha' | 'dhurdhura' | 'kemadruma' | 'chandramangala' | 'adhi' | 'chatussagara' | 'vasumathi' | 'rajalakshana' | 'vanchanachorabheethi' | 'sakata' | 'amala' | 'parvata' | 'kahala' | 'vesi' | 'vasi' | 'obhayachari' | 'hamsa' | 'malavya' | 'sasa' | 'ruchaka' | 'bhadra' | 'budhaaditya' | 'mahabhagya' | 'pushkala' | 'lakshmi' | 'gauri' | 'bharathi' | 'chapa' | 'sreenatha' | 'lagnamalika' | 'dhanamalika' | 'vikramamalika' | 'sukhamalika' | 'putramalika' | 'satrumalika' | 'kalatramalika' | 'randhramalika' | 'bhagyamalika' | 'karmamalika' | 'labhamalika' | 'vrayamalika' | 'sankha' | 'bheri' | 'mridanga' | 'parijatha' | 'gaja' | 'kalanidhi' | 'amsavatara' | 'hariharabrahma' | 'kusuma' | 'matsya' | 'kurma' | 'devendra' | 'makuta' | 'chandika' | 'jaya' | 'vidyut' | 'gandharva' | 'siva' | 'vishnu' | 'brahma' | 'indra' | 'ravi' | 'garuda' | 'go' | 'gola' | 'thrilochana' | 'kulavardhana' | 'yupa' | 'ishu' | 'sakti' | 'danda' | 'nav' | 'kuta' | 'chhatra' | 'chapa-2' | 'ardhachandra' | 'chandra' | 'gada' | 'sakata-2' | 'vihaga' | 'vajra' | 'yava' | 'sringhataka' | 'hala' | 'kamala' | 'vapee' | 'samudra' | 'vallaki' | 'damni' | 'pasa' | 'kedara' | 'sula' | 'yuga' | 'gola-2' | 'rajju' | 'musala' | 'nala' | 'srik' | 'mala' | 'sarpa' | 'duryoga' | 'daridra' | 'harsha' | 'sarala' | 'vimala' | 'sareerasoukhya' | 'dehapushti' | 'dehakashta' | 'rogagrastha' | 'krisanga' | 'krisanga-2' | 'dehasthoulya' | 'dehasthoulya-2' | 'dehasthoulya-3' | 'sadasanchara' | 'dhana' | 'dhana-2' | 'dhana-3' | 'dhana-4' | 'dhana-5' | 'dhana-6' | 'dhana-7' | 'dhana-8' | 'dhana-9' | 'dhana-10' | 'dhana-11' | 'bahudravyarjana' | 'swaveeryaddhana' | 'swaveeryaddhana-2' | 'swaveeryaddhana-3' | 'madhyavayasidhana' | 'anthyavayasidhana' | 'balyadhana' | 'bhratrumooladdhanaprapti' | 'bhratrumooladdhanaprapti-2' | 'matrumooladdhana' | 'putramooladdhana' | 'satrumooladdhana' | 'kalatramooladdhana' | 'amarananthadhana' | 'ayatnadhanalabha' | 'daridra-2' | 'daridra-3' | 'daridra-4' | 'daridra-5' | 'daridra-6' | 'daridra-7' | 'daridra-8' | 'daridra-9' | 'daridra-10' | 'daridra-11' | 'yukthisamanwithavagmi' | 'yukthisamanwithavagmi-2' | 'parihasaka' | 'asatyavadi' | 'jada' | 'bhaskara' | 'marud' | 'saraswathi' | 'budha' | 'mooka' | 'netranasa' | 'andha' | 'sumukha' | 'sumukha-2' | 'durmukha' | 'durmukha-2' | 'bhojanasoukhya' | 'annadana' | 'parannabhojana' | 'sraddhannabhuktha' | 'sarpaganda' | 'vakchalana' | 'vishaprayoga' | 'bhratruvriddhi' | 'sodaranasa' | 'ekabhagini' | 'dwadasasahodara' | 'sapthasankhyasahodara' | 'parakrama' | 'yuddhapraveena' | 'yuddhatpoorvadridhachitta' | 'yuddhatpaschaddrudha' | 'satkathadisravana' | 'uttamagriha' | 'vichitrasaudhaprakara' | 'ayatnagrihaprapta' | 'ayatnagrihaprapta-2' | 'grihanasa' | 'grihanasa-2' | 'bandhupujya' | 'bandhupujya-2' | 'bandhubhisthyaktha' | 'matrudeerghayur' | 'matrudeerghayur-2' | 'matrunasa' | 'matrunasa-2' | 'matrugami' | 'sahodareesangama' | 'kapata' | 'kapata-2' | 'kapata-3' | 'nishkapata' | 'nishkapata-2' | 'matrusatrutwa' | 'matrusneha' | 'vahana' | 'vahana-2' | 'anapathya' | 'sarpasapa' | 'sarpasapa-2' | 'sarpasapa-3' | 'sarpasapa-4' | 'pitrusapasutakshaya' | 'matrusapasutakshaya' | 'bhratrusapasutakshaya' | 'pretasapa' | 'bahuputra' | 'bahuputra-2' | 'dattaputra' | 'dattaputra-2' | 'aputra' | 'ekaputra' | 'suputra' | 'kalanirdesatputra' | 'kalanirdesatputra-2' | 'kalanirdesatputranasa' | 'kalanirdesatputranasa-2' | 'buddhimaturya' | 'theevrabuddhi' | 'buddhijada' | 'thrikalagnana' | 'putrasukha' | 'jara' | 'jarajaputra' | 'bahustree' | 'satkalatra' | 'bhagachumbana' | 'bhagya' | 'jananatpurvampitrumarana' | 'dhatrutwa' | 'apakeerti' | 'raja' | 'raja-2' | 'raja-3' | 'raja-4' | 'raja-5' | 'raja-6' | 'raja-7' | 'raja-8' | 'raja-9' | 'raja-10' | 'raja-11' | 'raja-12' | 'raja-13' | 'raja-14' | 'raja-15' | 'raja-16' | 'raja-17' | 'raja-18' | 'raja-19' | 'galakarna' | 'vrana' | 'sisnavyadhi' | 'kalatrashanda' | 'kushtaroga' | 'kushtaroga-2' | 'kshayaroga' | 'bandhana' | 'karascheda' | 'sirachcheda' | 'durmarana' | 'yuddhemarana' | 'sanghatakamarana' | 'sanghatakamarana-2' | 'peenasaroga' | 'pittaroga' | 'vikalangapatni' | 'putrakalatraheena' | 'bharyasahavyabhichara' | 'vamsacheda' | 'guhyaroga' | 'angaheena' | 'swetakushta' | 'pisachagrastha' | 'andha-2' | 'andha-3' | 'vatharoga' | 'matibhramana' | 'matibhramana-2' | 'matibhramana-3' | 'matibhramana-4' | 'khalwata' | 'nishturabhashi' | 'rajabhrashta' | 'raja-20' | 'raja-21' | 'gohanta'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/yoga/{id}'; }; export type GetYogaErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Yoga not found */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetYogaError = GetYogaErrors[keyof GetYogaErrors]; export type GetYogaResponses = { /** * Detailed yoga information */ 200: YogaDetail; }; export type GetYogaResponse = GetYogaResponses[keyof GetYogaResponses]; export type DetectYogasData = { body?: YogaDetectRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/yoga/detect'; }; export type DetectYogasErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type DetectYogasError = DetectYogasErrors[keyof DetectYogasErrors]; export type DetectYogasResponses = { /** * List of 48 classical yogas with present/absent verdicts and classical-text evidence. */ 200: YogaDetectResponse; }; export type DetectYogasResponse = DetectYogasResponses[keyof DetectYogasResponses]; export type GetKpAyanamsaData = { body?: never; path?: never; query?: { /** * Date for ayanamsa calculation in YYYY-MM-DD format. Defaults to today if not provided. Ayanamsa changes by ~0.01 degrees per month due to the precession of Earth. */ date?: string; /** * Time of day in 24-hour HH:MM:SS format, interpreted in the timezone below. Omit for midnight UTC. The ayanamsa moves about 0.14 arcseconds across a day, so supplying the time matters only when reconciling a chart against reference software to the arcsecond. */ time?: string; /** * IANA name (e.g. "Asia/Kolkata", "America/New_York"), decimal hours (e.g. 5.5 for IST, -5 for EST), or a fixed UTC offset (e.g. "+05:30"). IANA resolved to the DST-correct offset for the given date. Applies to the time field above. Defaults to 0 (UTC). */ timezone?: string; }; url: '/vedic-astrology/kp/ayanamsa'; }; export type GetKpAyanamsaErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetKpAyanamsaError = GetKpAyanamsaErrors[keyof GetKpAyanamsaErrors]; export type GetKpAyanamsaResponses = { /** * Successfully calculated KP-Newcomb ayanamsa */ 200: KpAyanamsaResponse; }; export type GetKpAyanamsaResponse = GetKpAyanamsaResponses[keyof GetKpAyanamsaResponses]; export type GetKpPlanetsData = { body?: KpPlanetsRequest; path?: never; query?: never; url: '/vedic-astrology/kp/planets'; }; export type GetKpPlanetsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetKpPlanetsError = GetKpPlanetsErrors[keyof GetKpPlanetsErrors]; export type GetKpPlanetsResponses = { /** * Successfully calculated KP planetary positions */ 200: KpPlanetsResponse; }; export type GetKpPlanetsResponse = GetKpPlanetsResponses[keyof GetKpPlanetsResponses]; export type GetKpCuspsData = { body?: KpCuspsRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/kp/cusps'; }; export type GetKpCuspsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetKpCuspsError = GetKpCuspsErrors[keyof GetKpCuspsErrors]; export type GetKpCuspsResponses = { /** * Successfully calculated Placidus house cusps */ 200: KpCuspsResponse; }; export type GetKpCuspsResponse = GetKpCuspsResponses[keyof GetKpCuspsResponses]; export type GenerateKpChartData = { body?: KpChartRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/kp/chart'; }; export type GenerateKpChartErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateKpChartError = GenerateKpChartErrors[keyof GenerateKpChartErrors]; export type GenerateKpChartResponses = { /** * Successfully generated KP birth chart */ 200: KpChartResponse; }; export type GenerateKpChartResponse = GenerateKpChartResponses[keyof GenerateKpChartResponses]; export type GetKpRulingPlanetsData = { body?: { /** * Observer latitude in decimal degrees */ latitude: number; /** * Observer longitude in decimal degrees */ longitude: number; /** * Timezone: IANA name (e.g. "America/New_York", "Europe/London") OR decimal hours from UTC. IANA resolved to the DST-correct offset based on birthDate or datetime. Defaults to 5.5. */ timezone?: number | string; /** * ISO 8601 datetime (YYYY-MM-DDTHH:MM:SS) for ruling planets. Defaults to current time. Interpreted as local time when a non-zero timezone is provided (a trailing Z is accepted but ignored); with timezone 0 it is UTC. */ datetime?: string; /** * Birth date (YYYY-MM-DD) to calculate significators. If provided with birthTime, response includes which houses each ruling planet signifies. */ birthDate?: string; /** * Birth time (HH:MM:SS) for significator calculation. Required if birthDate is provided. */ birthTime?: string; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the Rahu and Ketu positions. Mean is the traditional Vedic default and what printed panchangs use; the choice can move a KP sub-lord in narrow boundary cases, where a span can be as small as 0.5 degrees. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/kp/ruling-planets'; }; export type GetKpRulingPlanetsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetKpRulingPlanetsError = GetKpRulingPlanetsErrors[keyof GetKpRulingPlanetsErrors]; export type GetKpRulingPlanetsResponses = { /** * Ruling planets calculated successfully */ 200: KpRulingPlanetsResponse; }; export type GetKpRulingPlanetsResponse = GetKpRulingPlanetsResponses[keyof GetKpRulingPlanetsResponses]; export type GetKpRulingIntervalData = { body?: { /** * Start of the interval range in ISO 8601 (YYYY-MM-DDTHH:MM:SS). Interpreted as local time when a non-zero timezone is provided (a trailing Z is accepted but ignored); with timezone 0 it is UTC. */ startDatetime: string; /** * End of the interval range in ISO 8601 (YYYY-MM-DDTHH:MM:SS). Interpreted as local time when a non-zero timezone is provided (a trailing Z is accepted but ignored); with timezone 0 it is UTC. */ endDatetime: string; /** * Interval between calculations in minutes (1-1440). Use 1-5 for birth time rectification. */ intervalMinutes: number; /** * Observer latitude in decimal degrees */ latitude: number; /** * Observer longitude in decimal degrees */ longitude: number; /** * Timezone offset from UTC in decimal hours. When non-zero, all datetimes are treated as local time in this timezone (Z suffix is ignored). Output times are also converted to this timezone. Defaults to 5.5 (IST). */ timezone?: number | string; /** * Ayanamsa system for sidereal conversion. "kp-newcomb" uses the KP-Newcomb dynamic formula, the most common choice for KP astrology. "kp-old" uses the Krishnamurti original table from KP Reader-1 with constant precession rate. "lahiri" uses Lahiri/Chitrapaksha ayanamsa, matching most traditional Vedic software. "raman" uses the B.V. Raman ayanamsa from Hindu Predictive Astrology, a recognised traditional school that sits about 1.45 degrees below Lahiri. Defaults to "kp-newcomb". */ ayanamsa?: 'kp-newcomb' | 'kp-old' | 'lahiri' | 'raman'; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the Rahu and Ketu positions. Mean is the traditional Vedic default and what printed panchangs use; the choice can move a KP sub-lord in narrow boundary cases, where a span can be as small as 0.5 degrees. Defaults to "mean". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/kp/ruling-planets-interval'; }; export type GetKpRulingIntervalErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetKpRulingIntervalError = GetKpRulingIntervalErrors[keyof GetKpRulingIntervalErrors]; export type GetKpRulingIntervalResponses = { /** * Ruling planets with significators at intervals */ 200: KpRulingPlanetsIntervalResponse; }; export type GetKpRulingIntervalResponse = GetKpRulingIntervalResponses[keyof GetKpRulingIntervalResponses]; export type GetKpSublordChangesData = { body?: KpSublordChangesRequest; path?: never; query?: never; url: '/vedic-astrology/kp/sublord-changes'; }; export type GetKpSublordChangesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetKpSublordChangesError = GetKpSublordChangesErrors[keyof GetKpSublordChangesErrors]; export type GetKpSublordChangesResponses = { /** * Sublord change timings calculated successfully */ 200: KpSublordChangesResponse; }; export type GetKpSublordChangesResponse = GetKpSublordChangesResponses[keyof GetKpSublordChangesResponses]; export type GetKpRasiChangesData = { body?: KpRasiChangesRequest; path?: never; query?: never; url: '/vedic-astrology/kp/rasi-changes'; }; export type GetKpRasiChangesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetKpRasiChangesError = GetKpRasiChangesErrors[keyof GetKpRasiChangesErrors]; export type GetKpRasiChangesResponses = { /** * Sign ingress timings calculated successfully */ 200: KpRasiChangesResponse; }; export type GetKpRasiChangesResponse = GetKpRasiChangesResponses[keyof GetKpRasiChangesResponses]; export type GetKpPlanetsIntervalData = { body?: KpPlanetsIntervalRequest; path?: never; query?: never; url: '/vedic-astrology/kp/planets-interval'; }; export type GetKpPlanetsIntervalErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetKpPlanetsIntervalError = GetKpPlanetsIntervalErrors[keyof GetKpPlanetsIntervalErrors]; export type GetKpPlanetsIntervalResponses = { /** * Planetary positions calculated at all intervals */ 200: KpPlanetsIntervalResponse; }; export type GetKpPlanetsIntervalResponse = GetKpPlanetsIntervalResponses[keyof GetKpPlanetsIntervalResponses]; export type CastKpHoraryChartData = { body?: KpHoraryRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/kp/horary'; }; export type CastKpHoraryChartErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CastKpHoraryChartError = CastKpHoraryChartErrors[keyof CastKpHoraryChartErrors]; export type CastKpHoraryChartResponses = { /** * Horary chart with the Ascendant from the number, Placidus cusps, planets at the question moment, ruling planets, and four-level significators. */ 200: KpHoraryResponse; }; export type CastKpHoraryChartResponse = CastKpHoraryChartResponses[keyof CastKpHoraryChartResponses]; export type CalculateDrishtiData = { body?: { /** * Date in YYYY-MM-DD format. Planetary positions are calculated for this date to determine mutual aspects (drishti). */ date: string; /** * Time in HH:MM:SS format (24-hour). Exact time affects fast-moving planets (Moon, Mercury) and aspect orbs. */ time: string; /** * Observer latitude in decimal degrees. Used for Lagna calculation which affects house-based aspect analysis. */ latitude: number; /** * Observer longitude in decimal degrees. Affects local sidereal time for positional calculations. */ longitude: number; /** * Timezone offset from UTC in hours. Defaults to 5.5 (IST). */ timezone?: number | string; /** * Coordinate system for longitude output. "sidereal" (Nirayana) uses Lahiri ayanamsa - standard for Vedic astrology. "tropical" (Sayana) uses raw ecliptic longitude matching Western astrology. Defaults to "sidereal". */ coordinateSystem?: 'sidereal' | 'tropical'; }; path?: never; query?: never; url: '/vedic-astrology/aspects'; }; export type CalculateDrishtiErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateDrishtiError = CalculateDrishtiErrors[keyof CalculateDrishtiErrors]; export type CalculateDrishtiResponses = { /** * Aspects calculated successfully */ 200: { /** * Chart time the aspects were calculated for, echoed back as the local wall clock of the request (ISO 8601, no offset). This is the `date` and `time` you sent, NOT a UTC instant: hold them fixed and vary `timezone` and every longitude moves while this field does not. Combine it with the `timezone` you sent to recover the absolute moment. */ datetime: string; /** * Sidereal positions of all 9 planets at the given time. */ planets: Array<{ /** * Planet name (Sun through Ketu, all 9 Vedic grahas). */ name: string; /** * Sidereal longitude in degrees (0-360). */ longitude: number; /** * Vedic zodiac sign (rashi) the planet occupies. */ sign: string; }>; /** * Complete list of all Vedic aspects (drishti) between planets. Includes full (7th) and special aspects (Mars 4th/8th, Jupiter 5th/9th, Saturn 3rd/10th). */ aspects: Array<{ /** * Planet casting the aspect (graha drishti). */ aspectingPlanet: string; /** * Planet receiving the aspect. */ aspectedPlanet: string; /** * Vedic aspect type. All planets have 7th aspect. Special aspects: Mars 4th/8th, Jupiter 5th/9th, Saturn 3rd/10th. */ aspectType: 'conjunction' | '7th' | '4th' | '8th' | '5th' | '9th' | '3rd' | '10th'; /** * Aspect strength percentage (0-100). 100 = exact aspect, decreases with orb distance. */ strength: number; /** * Angular distance from exact aspect in degrees. Smaller orb = more potent aspect. */ orb: number; }>; /** * Aspect table grouped by aspecting planet. useful for rendering aspect grids in astrology software. */ aspectTable: Array<{ /** * Planet casting aspects. */ planet: string; /** * All aspects cast by this planet. */ aspects: Array<{ /** * Planet being aspected. */ planet: string; /** * Vedic aspect house (7th, 4th, 8th, 5th, 9th, 3rd, 10th, or conjunction). */ aspectType: string; /** * Aspect strength percentage. */ strength: number; }>; }>; /** * Pairs of planets aspecting each other simultaneously. Mutual aspects amplify planetary influence significantly. */ mutualAspects: Array<{ /** * First planet in the mutual aspect pair. */ planet1: string; /** * Second planet in the mutual aspect pair. */ planet2: string; /** * The aspect type shared mutually. Mutual aspects are especially strong in Vedic astrology. */ aspectType: string; }>; }; }; export type CalculateDrishtiResponse = CalculateDrishtiResponses[keyof CalculateDrishtiResponses]; export type GetMonthlyAspectsData = { body?: { /** * Year for monthly analysis (1900-2100). Defaults to the current year (UTC). */ year?: number; /** * Month number (1-12). Defaults to the current month (UTC). */ month?: number; /** * Timezone offset from UTC in hours. Output times are converted to this timezone. Defaults to 0 (UTC). */ timezone?: number | string; /** * Coordinate system for longitude output. "sidereal" (Nirayana) uses Lahiri ayanamsa - standard for Vedic astrology. "tropical" (Sayana) uses raw ecliptic longitude matching Western astrology. Defaults to "sidereal". */ coordinateSystem?: 'sidereal' | 'tropical'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/aspects/monthly'; }; export type GetMonthlyAspectsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetMonthlyAspectsError = GetMonthlyAspectsErrors[keyof GetMonthlyAspectsErrors]; export type GetMonthlyAspectsResponses = { /** * Monthly planetary aspect events */ 200: { /** * Year of the aspect analysis. Echoes the year that was requested, or the current UTC year when it was omitted. */ year: number; /** * Month of the aspect analysis. Echoes the month that was requested, or the current UTC month when it was omitted. */ month: number; /** * Timezone offset from UTC in hours that the event dates and times are reported in. Echoes the requested timezone. */ timezone: number; /** * All planetary aspect events detected during the month, sorted chronologically by closest approach date. */ events: Array<{ /** * First planet forming the aspect. One of the Navagraha, Sun through Ketu. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use planet1Localized for anything a reader sees. */ planet1: string; /** * First planet name in the requested language, for display. Present only when lang is set to a language other than English, since in English it would repeat planet1 exactly. */ planet1Localized?: string; /** * Second planet forming the aspect. Always English, whatever the lang parameter says. Use planet2Localized for anything a reader sees. */ planet2: string; /** * Second planet name in the requested language, for display. Present only when lang is set to a language other than English. */ planet2Localized?: string; /** * Aspect type. major: conjunction (0 deg), opposition (180 deg), trine (120 deg), square (90 deg), sextile (60 deg). Minor: vigintile (18 deg), semi-sextile (30 deg), undecile (32.73 deg), semi-quintile (36 deg), novile (40 deg), semi-square (45 deg), septile (51.43 deg), quintile (72 deg), binovile (80 deg), centile (100 deg), biseptile (102.86 deg), tredecile (108 deg), sesqui-square (135 deg), bi-quintile (144 deg), quincunx (150 deg), triseptile (154.29 deg), quadranovile (160 deg). */ aspect: string; /** * Date when the aspect is closest to exact (YYYY-MM-DD). Adjusted to requested timezone. */ date: string; /** * Time when the aspect is closest to exact (HH:MM, 24-hour). Adjusted to requested timezone. */ time: string; /** * Full datetime when aspect is closest to exact. Adjusted to requested timezone. */ datetime: string; /** * Angular distance from exact aspect in degrees at closest approach. Smaller orb indicates a more powerful aspect. */ orb: number; /** * Actual angular distance between the two planets in degrees at closest approach. */ distance: number; /** * Sidereal longitude of the first planet at time of aspect (Lahiri ayanamsa). */ planet1Longitude: number; /** * Sidereal longitude of the second planet at time of aspect. */ planet2Longitude: number; }>; }; }; export type GetMonthlyAspectsResponse = GetMonthlyAspectsResponses[keyof GetMonthlyAspectsResponses]; export type GetLunarAspectsData = { body?: { /** * Year for monthly analysis (1900-2100). Defaults to the current year (UTC). */ year?: number; /** * Month number (1-12). Defaults to the current month (UTC). */ month?: number; /** * Timezone offset from UTC in hours. Output times are converted to this timezone. Defaults to 0 (UTC). */ timezone?: number | string; /** * Coordinate system for longitude output. "sidereal" (Nirayana) uses Lahiri ayanamsa - standard for Vedic astrology. "tropical" (Sayana) uses raw ecliptic longitude matching Western astrology. Defaults to "sidereal". */ coordinateSystem?: 'sidereal' | 'tropical'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/aspects/lunar'; }; export type GetLunarAspectsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetLunarAspectsError = GetLunarAspectsErrors[keyof GetLunarAspectsErrors]; export type GetLunarAspectsResponses = { /** * Monthly lunar aspect events */ 200: { /** * Year of the lunar aspect analysis. Echoes the year that was requested, or the current UTC year when it was omitted. */ year: number; /** * Month of the lunar aspect analysis. Echoes the month that was requested, or the current UTC month when it was omitted. */ month: number; /** * Timezone offset from UTC in hours that the event dates and times are reported in. Echoes the requested timezone. */ timezone: number; /** * All Moon aspect events during the month, sorted chronologically. Moon completes one full cycle in approximately 27 days. */ events: Array<{ /** * Planet that the Moon forms an aspect with. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use planetLocalized for anything a reader sees. */ planet: string; /** * Planet name in the requested language, for display. Present only when lang is set to a language other than English, since in English it would repeat planet exactly. */ planetLocalized?: string; /** * Aspect type. major: conjunction, opposition, trine, square, sextile. Minor: vigintile, semi-sextile, undecile, semi-quintile, novile, semi-square, septile, quintile, binovile, centile, biseptile, tredecile, sesqui-square, bi-quintile, quincunx, triseptile, quadranovile. */ aspect: string; /** * Date of closest approach for this lunar aspect (YYYY-MM-DD). Adjusted to requested timezone. */ date: string; /** * Time of closest approach for this lunar aspect (HH:MM, 24-hour). Adjusted to requested timezone. */ time: string; /** * Full datetime of closest approach. Adjusted to requested timezone. */ datetime: string; /** * Angular distance from exact lunar aspect in degrees. Smaller orb = stronger Moon influence. */ orb: number; /** * Actual angular distance between Moon and the aspected planet in degrees. */ distance: number; /** * Sidereal longitude of the Moon at the time of aspect (Lahiri ayanamsa). */ moonLongitude: number; /** * Sidereal longitude of the aspected planet at the time of aspect. */ planetLongitude: number; }>; }; }; export type GetLunarAspectsResponse = GetLunarAspectsResponses[keyof GetLunarAspectsResponses]; export type CalculateTransitData = { body?: { /** * Birth date in YYYY-MM-DD format. Used to calculate the natal chart against which transits are analyzed. */ birthDate: string; /** * Birth time in HH:MM:SS format (24-hour). Critical for accurate natal Lagna and Placidus house cusps which determine transit house placements. */ birthTime: string; /** * Transit date to analyze in YYYY-MM-DD format. Planetary positions on this date are overlaid on the natal chart. */ transitDate: string; /** * Transit time in HH:MM:SS format (24-hour). Affects fast-moving planets like Moon. Defaults to noon. */ transitTime?: string; /** * Observer latitude in decimal degrees. Determines Placidus house cusps for natal chart house assignments. */ latitude: number; /** * Observer longitude in decimal degrees. Affects local sidereal time for Lagna and house calculations. */ longitude: number; /** * Timezone offset from UTC in hours. Defaults to 5.5 (IST). */ timezone?: number | string; /** * Coordinate system for longitude output. "sidereal" (Nirayana) uses Lahiri ayanamsa - standard for Vedic astrology. "tropical" (Sayana) uses raw ecliptic longitude matching Western astrology. Defaults to "sidereal". */ coordinateSystem?: 'sidereal' | 'tropical'; }; path?: never; query?: never; url: '/vedic-astrology/transit'; }; export type CalculateTransitErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateTransitError = CalculateTransitErrors[keyof CalculateTransitErrors]; export type CalculateTransitResponses = { /** * Transit analysis calculated successfully */ 200: { /** * The zodiac frame every longitude in this response was computed in, so a cached or forwarded payload is self describing. Sidereal requests report the Lahiri ayanamsa, read at the birth instant; the transit positions use the same named frame resolved at their own instant, which moves by about 50 arcseconds a year. A tropical request reports "tropical" with 0 degrees subtracted, which is the one case a Vedic table can otherwise be rendered in the wrong zodiac with nothing on screen saying so. */ frame: { /** * Sidereal frame this chart was cast in, echoing the ayanamsa request field. "lahiri" when the field was omitted. */ ayanamsa: string; /** * Degrees actually subtracted from every tropical longitude to produce this chart, read at the birth instant. Subtract it back to recover the tropical positions, or compare it against your reference software to confirm you are in the same frame before chasing a placement difference. */ ayanamsaDegrees: number; }; /** * Birth datetime used for the natal chart, echoed as the local civil date and time supplied in the request (YYYY-MM-DDTHH:MM:SS). Combine it with the timezone field to recover the UTC instant. */ birthDatetime: string; /** * Transit datetime being analyzed, echoed as the local civil date and time supplied in the request (YYYY-MM-DDTHH:MM:SS). Gochar positions are computed for this moment and overlaid on the natal chart. */ transitDatetime: string; /** * All 9 planetary positions from the natal (birth) chart. */ natalPlanets: Array<{ /** * Graha name, Sun through Ketu. The Lagna is not one of these entries; it is a house frame rather than a body, and the natal house numbers on every entry are counted from it. */ name: string; /** * Sidereal longitude in degrees (0-360) using Lahiri ayanamsa. */ longitude: number; /** * Vedic zodiac sign (rashi) the planet occupies in the birth chart. */ sign: string; /** * Bhava (house) number 1-12, counted whole-sign from the Lagna (house 1 is the Lagna rashi). */ house: number; }>; /** * Current planetary positions overlaid on the natal chart with house placements, aspects, and the Gochara Kaksha verdict for each graha. */ transitingPlanets: Array<{ /** * Transiting planet name. */ name: string; /** * Current sidereal longitude of the transiting planet. */ longitude: number; /** * Current zodiac sign of the transiting planet. */ sign: string; /** * Which natal house (whole-sign bhava counted from the Lagna) this graha is currently transiting through. This is the Lagna reading of the transit, which is what a transit chart drawn over the birth chart shows. For the house classical Gochara is judged from, read houseFromMoon instead. */ natalHouse: number; /** * Which house this graha is transiting counted from the natal Moon sign (Janma Rashi), 1-12 whole-sign and counted inclusively, so the Moon sign itself is 1. This is the number classical Gochara is reckoned in: Phaladeepika chapter 26 opens by saying that of all the Lagnas only the Moon Lagna matters for transit results, and the Vedha and Ashtakavarga transit rules are counted from the Moon throughout. The reference sign is the sign of the Moon entry in natalPlanets, so a client can label the column without a second request. */ houseFromMoon: number; /** * Degree-based angular aspects between this transiting graha and the natal grahas. Western vocabulary, kept for callers who read a chart that way; drishtiToNatal is the Vedic answer to the same question. */ aspectsToNatal: Array<{ /** * Natal planet being aspected by this transiting planet. */ natalPlanet: string; /** * Degree-based angular aspect between the two longitudes: conjunction, opposition, trine, square, or sextile. This is the Western aspect vocabulary and it is offered for charts read that way. Parashari jyotish has no sextile, square or trine, so for the Vedic reading use drishtiToNatal, which reports graha drishti by house count. */ aspectType: string; /** * Angular distance from exact aspect in degrees. Smaller orb = stronger influence. */ orb: number; }>; /** * Graha drishti cast by this transiting graha onto the natal grahas, the Vedic reading of transit-to-natal aspects. Rahu and Ketu cast none. Empty when this graha reaches no occupied natal sign. */ drishtiToNatal: Array<{ /** * Natal graha receiving the drishti from this transiting graha. */ natalPlanet: string; /** * Which house the drishti falls on, counted whole-sign and inclusively from the transiting graha. Every graha aspects the 7th; Mars adds the 4th and 8th, Jupiter the 5th and 9th, Saturn the 3rd and 10th. Same vocabulary the /aspects endpoint returns, so the two can be compared directly. */ aspectType: 'conjunction' | '7th' | '4th' | '8th' | '5th' | '9th' | '3rd' | '10th'; /** * Drishti strength as a percentage. Full and special aspects are 100; the partial quarter, half and three-quarter sights are not reported. */ strength: number; /** * Gap between the two degrees-in-sign, in degrees. Graha drishti is whole-sign and does not depend on this, so read it as how exact the sight is inside the pair of rashis rather than as a condition for the aspect. */ orb: number; }>; /** * Gochara Kaksha: the ashtakavarga-qualified reading of this transit. The sign says where a graha is, this says whether the exact stretch it currently occupies is one its own Bhinnashtakavarga supports, which is the classical way of refining a transit verdict from sign-level to under four degrees. */ kaksha: { /** * Kaksha number 1-8 within the current sign. Each sign divides into eight kakshas of 3 degrees 45 minutes, crossed in order, so this is how far through the sign the graha has travelled. */ number: number; /** * Graha ruling this kaksha. The eight lords run Saturn, Jupiter, Mars, Sun, Venus, Mercury, Moon, Lagna from the start of every sign, ordered by how long each takes to cross a sign. */ lord: string; /** * Degree within the sign where this kaksha begins (0, 3.75, 7.5 and so on). */ startDegree: number; /** * Degree within the sign where this kaksha ends. */ endDegree: number; /** * Whether this kaksha lord gave the transiting graha a bindu in the sign being transited, which is the Gochara Kaksha verdict: true reads as a favourable stretch of the transit, false as an unfavourable one. Null means the question does not apply rather than that the answer is no, because Rahu and Ketu have no Bhinnashtakavarga to read. Never render null as unfavourable. */ bindu: boolean | null; /** * Bindus the transiting graha holds in this whole sign, 0-8, or null for Rahu and Ketu. Context for the verdict, since the same kaksha reads differently in a sign worth 7 than in one worth 1. */ binduCount: number | null; }; }>; /** * Highlighted transits from slow-moving planets (Jupiter, Saturn, Rahu, Ketu), most impactful for Gochar analysis. */ keyTransits: Array<{ /** * Slow-moving planet (Jupiter, Saturn, Rahu, Ketu) forming a significant transit. */ planet: string; /** * Human-readable transit summary, naming the rashi being transited and both house readings: from the Lagna, then from the natal Moon. */ description: string; /** * Natal house being transited by this slow graha, counted whole-sign from the Lagna. Mirrors natalHouse on the matching transitingPlanets entry. */ natalHouse: number; /** * House being transited by this slow graha counted from the natal Moon sign (Janma Rashi), the classical Gochara reference. Mirrors houseFromMoon on the matching transitingPlanets entry. */ houseFromMoon: number; /** * Notable degree-based angular aspects to natal planets from this slow-moving transiting planet, in Western vocabulary. */ aspects: Array; /** * Graha drishti this slow-moving transiting graha casts on the natal grahas, the Vedic reading. Empty for Rahu and Ketu, which cast none. */ drishti: Array; }>; }; }; export type CalculateTransitResponse = CalculateTransitResponses[keyof CalculateTransitResponses]; export type GetMonthlyTransitsData = { body?: { /** * Year for monthly transit analysis (1900-2100). Defaults to the current year (UTC). */ year?: number; /** * Month number (1-12) for transit analysis. Defaults to the current month (UTC). */ month?: number; /** * Timezone offset from UTC in hours. Output times are converted to this timezone. Defaults to 0 (UTC). */ timezone?: number | string; /** * Coordinate system for longitude output. "sidereal" (Nirayana) uses Lahiri ayanamsa - standard for Vedic astrology. "tropical" (Sayana) uses raw ecliptic longitude matching Western astrology. Defaults to "sidereal". */ coordinateSystem?: 'sidereal' | 'tropical'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/transit/monthly'; }; export type GetMonthlyTransitsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetMonthlyTransitsError = GetMonthlyTransitsErrors[keyof GetMonthlyTransitsErrors]; export type GetMonthlyTransitsResponses = { /** * Monthly transit data calculated successfully */ 200: { /** * Year of the monthly transit analysis. Echoes the year that was requested, or the current UTC year when it was omitted. */ year: number; /** * Month of the monthly transit analysis. Echoes the month that was requested, or the current UTC month when it was omitted. */ month: number; /** * Timezone offset from UTC in hours that the event dates and times are reported in. Echoes the requested timezone. */ timezone: number; /** * Planetary positions at the beginning of the month (day 1, 00:00 UTC). */ startingPositions: Array<{ /** * Planet (graha) name. One of the 9 Navagraha used in Vedic transit (Gochar) analysis. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use planetLocalized for anything a reader sees. */ planet: string; /** * Planet name in the requested language, for display. Present only when lang is set to a language other than English. */ planetLocalized?: string; /** * Zodiac sign (rashi) the planet occupies at the start of the month. Always English. Use signLocalized for anything a reader sees. */ sign: string; /** * Zodiac sign name in the requested language, for display. Present only when lang is set to a language other than English. */ signLocalized?: string; /** * Sidereal longitude at the start of the month. */ longitude: number; }>; /** * All sign change events during the month, sorted chronologically. Moon changes sign roughly every 2.25 days, Sun once a month, slow planets less frequently. */ transitEvents: Array<{ /** * Planet that changes sign (rashi) during this month. One of the Navagraha: Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use planetLocalized for anything a reader sees. */ planet: string; /** * Planet name in the requested language, for display. Present only when lang is set to a language other than English, since in English it would repeat planet exactly. */ planetLocalized?: string; /** * Zodiac sign the planet is leaving (previous rashi). Always English. Use fromSignLocalized for anything a reader sees. */ fromSign: string; /** * Name of the sign being left, in the requested language, for display. Present only when lang is set to a language other than English. */ fromSignLocalized?: string; /** * Zodiac sign the planet is entering (new rashi transit). Always English. Use toSignLocalized for anything a reader sees. */ toSign: string; /** * Name of the sign being entered, in the requested language, for display. Present only when lang is set to a language other than English. */ toSignLocalized?: string; /** * Date of the sign change (YYYY-MM-DD). Adjusted to requested timezone. */ date: string; /** * Time of the sign change (HH:MM, 24-hour). Adjusted to requested timezone. Precise to ~1 minute via binary search. */ time: string; /** * Full datetime of the sign change. Adjusted to requested timezone. */ datetime: string; /** * Whether the planet is in retrograde motion (vakri) at the time of sign change. A retrograde ingress means the planet is moving backward into the previous sign, which carries different astrological significance than a direct (forward) ingress. Rahu and Ketu are always retrograde. */ isRetrograde: boolean; }>; }; }; export type GetMonthlyTransitsResponse = GetMonthlyTransitsResponses[keyof GetMonthlyTransitsResponses]; export type CalculateParallelsData = { body?: { /** * Date in YYYY-MM-DD format. Planetary declinations are calculated for this date to find parallel and contraparallel aspects. */ date: string; /** * Time in HH:MM:SS format (24-hour). Exact time affects declination values, especially for the fast-moving Moon. */ time: string; /** * Observer latitude in decimal degrees. Used for topocentric declination corrections. */ latitude: number; /** * Observer longitude in decimal degrees. Affects local time context for declination calculations. */ longitude: number; /** * Timezone offset from UTC in hours. Defaults to 5.5 (IST). */ timezone?: number | string; /** * Orb in degrees for parallel/contraparallel detection. Defaults to 1.5°. */ orb?: number; }; path?: never; query?: never; url: '/vedic-astrology/parallels'; }; export type CalculateParallelsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateParallelsError = CalculateParallelsErrors[keyof CalculateParallelsErrors]; export type CalculateParallelsResponses = { /** * Declination parallels calculated successfully */ 200: { /** * Datetime used for the declination calculation, echoed as the local civil date and time supplied in the request (YYYY-MM-DDTHH:MM:SS). The timezone field of the request is what converts it to the instant the declinations are computed for. */ datetime: string; /** * Declination and right ascension for each planet at the given moment. */ planets: Array<{ /** * Planet name (Sun through Saturn, the 7 visible planets). */ name: string; /** * Celestial declination in degrees. Positive = north of celestial equator, negative = south. */ declination: number; /** * Right ascension in degrees (0-360) along the celestial equator. */ rightAscension: number; }>; /** * All parallel and contraparallel aspects found within the specified orb. Parallels are powerful hidden aspects often overlooked in standard chart analysis. */ parallels: Array<{ /** * First planet in the parallel/contraparallel pair. */ planet1: string; /** * Second planet in the pair. */ planet2: string; /** * Parallel = same declination (acts like conjunction). Contraparallel = opposite declination (acts like opposition). */ type: 'parallel' | 'contraparallel'; /** * Angular difference from exact parallel/contraparallel in degrees. Smaller = stronger. */ orb: number; /** * Declination of the first planet in degrees. */ dec1: number; /** * Declination of the second planet in degrees. */ dec2: number; }>; }; }; export type CalculateParallelsResponse = CalculateParallelsResponses[keyof CalculateParallelsResponses]; export type GetMonthlyParallelsData = { body?: { /** * Year for monthly parallel analysis (1900-2100). Defaults to the current year (UTC). */ year?: number; /** * Month number (1-12) for parallel analysis. Defaults to the current month (UTC). */ month?: number; /** * Timezone offset from UTC in hours. Output times are converted to this timezone. Defaults to 0 (UTC). */ timezone?: number | string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/parallels/monthly'; }; export type GetMonthlyParallelsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetMonthlyParallelsError = GetMonthlyParallelsErrors[keyof GetMonthlyParallelsErrors]; export type GetMonthlyParallelsResponses = { /** * Monthly parallel events */ 200: { /** * Year of the parallel analysis. Echoes the year that was requested, or the current UTC year when it was omitted. */ year: number; /** * Month of the parallel analysis. Echoes the month that was requested, or the current UTC month when it was omitted. */ month: number; /** * All parallel and contraparallel events detected during the month, sorted chronologically. */ events: Array<{ /** * First planet in the parallel or contraparallel pair. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use planet1Localized for anything a reader sees. */ planet1: string; /** * First planet name in the requested language, for display. Present only when lang is set to a language other than English, since in English it would repeat planet1 exactly. */ planet1Localized?: string; /** * Second planet in the pair. Always English, whatever the lang parameter says. Use planet2Localized for anything a reader sees. */ planet2: string; /** * Second planet name in the requested language, for display. Present only when lang is set to a language other than English. */ planet2Localized?: string; /** * Parallel = same declination (acts like conjunction in strength). Contraparallel = opposite declination (acts like opposition). */ type: 'parallel' | 'contraparallel'; /** * Date of closest declination match (YYYY-MM-DD). Adjusted to requested timezone. */ date: string; /** * Time of closest declination match (HH:MM, 24-hour). Adjusted to requested timezone. */ time: string; /** * Full datetime of closest declination match. Adjusted to requested timezone. */ datetime: string; /** * Declination difference from exact parallel/contraparallel in degrees. Smaller = stronger. */ orb: number; /** * Declination of the first planet in degrees. */ dec1: number; /** * Declination of the second planet in degrees. */ dec2: number; }>; }; }; export type GetMonthlyParallelsResponse = GetMonthlyParallelsResponses[keyof GetMonthlyParallelsResponses]; export type GetEclipticCrossingsData = { body?: { /** * Year to scan for ecliptic crossings (1900-2100). */ year: number; /** * Timezone offset from UTC in hours. Output times are converted to this timezone. Defaults to 0 (UTC). */ timezone?: number | string; /** * Coordinate system for longitude output. "sidereal" (Nirayana) uses Lahiri ayanamsa - standard for Vedic astrology. "tropical" (Sayana) uses raw ecliptic longitude matching Western astrology. Defaults to "sidereal". */ coordinateSystem?: 'sidereal' | 'tropical'; }; path?: never; query?: never; url: '/vedic-astrology/ecliptic-crossings'; }; export type GetEclipticCrossingsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetEclipticCrossingsError = GetEclipticCrossingsErrors[keyof GetEclipticCrossingsErrors]; export type GetEclipticCrossingsResponses = { /** * Ecliptic crossing events for the year */ 200: { /** * Year scanned for ecliptic crossings. */ year: number; /** * Timezone offset from UTC in hours that the event dates and times are reported in. Echoes the requested timezone. */ timezone: number; /** * All ecliptic crossing events for visible planets during the year, sorted chronologically. */ events: Array<{ /** * Planet crossing the ecliptic plane. Sun is excluded (always on the ecliptic by definition). */ planet: string; /** * Date of the ecliptic crossing (YYYY-MM-DD). Adjusted to requested timezone. */ date: string; /** * Time of the ecliptic crossing (HH:MM, 24-hour). Adjusted to requested timezone. */ time: string; /** * Full datetime of the ecliptic crossing. Adjusted to requested timezone. */ datetime: string; /** * Ascending = planet moves from south to north of the ecliptic. Descending = north to south. */ direction: 'ascending' | 'descending'; /** * Sidereal longitude of the planet at the moment of crossing (Lahiri ayanamsa). */ longitude: number; /** * Vedic zodiac sign (rashi) the planet occupies at the crossing. */ sign: string; }>; }; }; export type GetEclipticCrossingsResponse = GetEclipticCrossingsResponses[keyof GetEclipticCrossingsResponses]; export type ListRashisData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/rashis'; }; export type ListRashisErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListRashisError = ListRashisErrors[keyof ListRashisErrors]; export type ListRashisResponses = { /** * Array of all 12 Vedic rashis (Mesha through Meen) with Sanskrit names, Western equivalents, sidereal date ranges, symbols, governing Adityas, and personality characteristics. */ 200: RashiListResponse; }; export type ListRashisResponse = ListRashisResponses[keyof ListRashisResponses]; export type GetRashiData = { body?: never; path: { /** * Rashi ID slug. One of: mesha, vrishabha, mithun, karka, simha, kanya, tula, vrischika, dhanu, makar, kumbha, meen. */ id: 'mesha' | 'vrishabha' | 'mithun' | 'karka' | 'simha' | 'kanya' | 'tula' | 'vrischika' | 'dhanu' | 'makar' | 'kumbha' | 'meen'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/rashis/{id}'; }; export type GetRashiErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Rashi not found */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetRashiError = GetRashiErrors[keyof GetRashiErrors]; export type GetRashiResponses = { /** * Single rashi with Sanskrit name, Western equivalent, sidereal date range, symbol, governing Aditya, and personality characteristics. */ 200: RashiResponse; }; export type GetRashiResponse = GetRashiResponses[keyof GetRashiResponses]; export type ListNakshatrasData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/nakshatras'; }; export type ListNakshatrasErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListNakshatrasError = ListNakshatrasErrors[keyof ListNakshatrasErrors]; export type ListNakshatrasResponses = { /** * Array of all 27 nakshatras (Ashwini through Revati) with zodiac ranges, ruling planets, deities, symbols, personality characteristics, and traditional remedies. */ 200: NakshatraListResponse; }; export type ListNakshatrasResponse = ListNakshatrasResponses[keyof ListNakshatrasResponses]; export type GetNakshatraData = { body?: never; path: { /** * Nakshatra ID slug. Examples: ashwini, bharani, krittika, rohini, mrigashira, ardra, punarvasu, pushya, ashlesha, magha, etc. */ id: 'ashwini' | 'bharani' | 'krittika' | 'rohini' | 'mrigashira' | 'ardra' | 'punarvasu' | 'pushya' | 'ashlesha' | 'magha' | 'purva-phalguni' | 'uttara-phalguni' | 'hasta' | 'chitra' | 'swati' | 'vishakha' | 'anuradha' | 'jyeshtha' | 'moola' | 'purva-ashadha' | 'uttara-ashadha' | 'shravana' | 'dhanishta' | 'shatabhisha' | 'purva-bhadrapada' | 'uttara-bhadrapada' | 'revati'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/nakshatras/{id}'; }; export type GetNakshatraErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Nakshatra not found */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetNakshatraError = GetNakshatraErrors[keyof GetNakshatraErrors]; export type GetNakshatraResponses = { /** * Single nakshatra with zodiac range, ruling planet, presiding deity, symbol, personality characteristics, and traditional remedies (mantras, gemstones, rituals). */ 200: NakshatraResponse; }; export type GetNakshatraResponse = GetNakshatraResponses[keyof GetNakshatraResponses]; export type GetUpagrahaPositionsData = { body?: UpagrahaRequest; path?: never; query?: never; url: '/vedic-astrology/upagraha'; }; export type GetUpagrahaPositionsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetUpagrahaPositionsError = GetUpagrahaPositionsErrors[keyof GetUpagrahaPositionsErrors]; export type GetUpagrahaPositionsResponses = { /** * All 11 upagraha positions with rashi, nakshatra, and pada details. */ 200: UpagrahaResponse; }; export type GetUpagrahaPositionsResponse = GetUpagrahaPositionsResponses[keyof GetUpagrahaPositionsResponses]; export type CalculateAshtakavargaData = { body?: AshtakavargaRequest; path?: never; query?: never; url: '/vedic-astrology/ashtakavarga'; }; export type CalculateAshtakavargaErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateAshtakavargaError = CalculateAshtakavargaErrors[keyof CalculateAshtakavargaErrors]; export type CalculateAshtakavargaResponses = { /** * Complete Ashtakavarga with Bhinnashtakavarga, Sarvashtakavarga (337-point), Reduced Ashtakavarga (Trikona + Ekadipati Shodhana), and Shodhya Pinda planetary strength. */ 200: AshtakavargaResponse; }; export type CalculateAshtakavargaResponse = CalculateAshtakavargaResponses[keyof CalculateAshtakavargaResponses]; export type CalculateShadbalaData = { body?: ShadbalaRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/shadbala'; }; export type CalculateShadbalaErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateShadbalaError = CalculateShadbalaErrors[keyof CalculateShadbalaErrors]; export type CalculateShadbalaResponses = { /** * Complete Shadbala with 6 strength components, Ishta/Kashta Phala, strength ratios, and relative ranking for all 7 planets. */ 200: ShadbalaResponse; }; export type CalculateShadbalaResponse = CalculateShadbalaResponses[keyof CalculateShadbalaResponses]; export type ListAvasthasData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Return only the states of one system: "baladi" (5), "jagradadi" (3) or "deeptadi" (9). Omit for all 17. */ system?: 'baladi' | 'jagradadi' | 'deeptadi'; }; url: '/vedic-astrology/avasthas'; }; export type ListAvasthasErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListAvasthasError = ListAvasthasErrors[keyof ListAvasthasErrors]; export type ListAvasthasResponses = { /** * Avastha states with their labels and interpretations, in system order. */ 200: Array<{ /** * Unique slug for the avastha state. It is the lowercased form of the state name the birth chart returns, so a chart value maps straight onto this record. */ id: string; /** * Sanskrit name of the state, exactly as it appears in the `awastha`, `jagradadi` or `deeptadi` field of a birth chart. */ name: string; /** * Which avastha system the state belongs to, and therefore which birth-chart field it appears in. "baladi" is the five-fold age state set by degree within the sign and appears in `awastha`. "jagradadi" is the three-fold waking state set by sign dignity. "deeptadi" is the nine-fold dispositional state. Baladi applies to every body; the other two apply to the seven classical grahas only. */ system: 'baladi' | 'jagradadi' | 'deeptadi'; /** * Short label for the state, sized for a table cell beside the graha. */ meaning: string; /** * What the state means for the results the graha delivers, which is the whole purpose of reading an avastha: the chart says where a graha is, the avastha says how much of its promise it can keep. */ interpretation: string; }>; }; export type ListAvasthasResponse = ListAvasthasResponses[keyof ListAvasthasResponses]; export type GetAvasthaData = { body?: never; path: { /** * Avastha slug. Baladi: bala, kumara, yuva, vriddha, mrita. Jagradadi: jagrat, swapna, sushupti. Deeptadi: dipta, svastha, pramudita, shanta, dina, duhkhita, vikala, khala, kopa. */ id: 'bala' | 'kumara' | 'yuva' | 'vriddha' | 'mrita' | 'jagrat' | 'swapna' | 'sushupti' | 'dipta' | 'svastha' | 'pramudita' | 'shanta' | 'dina' | 'duhkhita' | 'vikala' | 'khala' | 'kopa'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/avasthas/{id}'; }; export type GetAvasthaErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * No avastha state matches that slug. */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetAvasthaError = GetAvasthaErrors[keyof GetAvasthaErrors]; export type GetAvasthaResponses = { /** * The avastha state with its system, label and interpretation. */ 200: { /** * Unique slug for the avastha state. It is the lowercased form of the state name the birth chart returns, so a chart value maps straight onto this record. */ id: string; /** * Sanskrit name of the state, exactly as it appears in the `awastha`, `jagradadi` or `deeptadi` field of a birth chart. */ name: string; /** * Which avastha system the state belongs to, and therefore which birth-chart field it appears in. "baladi" is the five-fold age state set by degree within the sign and appears in `awastha`. "jagradadi" is the three-fold waking state set by sign dignity. "deeptadi" is the nine-fold dispositional state. Baladi applies to every body; the other two apply to the seven classical grahas only. */ system: 'baladi' | 'jagradadi' | 'deeptadi'; /** * Short label for the state, sized for a table cell beside the graha. */ meaning: string; /** * What the state means for the results the graha delivers, which is the whole purpose of reading an avastha: the chart says where a graha is, the avastha says how much of its promise it can keep. */ interpretation: string; }; }; export type GetAvasthaResponse = GetAvasthaResponses[keyof GetAvasthaResponses]; export type CalculateArudhaPadasData = { body?: ArudhaRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/arudha'; }; export type CalculateArudhaPadasErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateArudhaPadasError = CalculateArudhaPadasErrors[keyof CalculateArudhaPadasErrors]; export type CalculateArudhaPadasResponses = { /** * All twelve Arudha padas with derivation detail, plus the Arudha Lagna and Upapada lifted to the top level. */ 200: ArudhaResponse; }; export type CalculateArudhaPadasResponse = CalculateArudhaPadasResponses[keyof CalculateArudhaPadasResponses]; export type CalculateCharaKarakasData = { body?: CharaKarakaRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/vedic-astrology/chara-karakas'; }; export type CalculateCharaKarakasErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateCharaKarakasError = CalculateCharaKarakasErrors[keyof CalculateCharaKarakasErrors]; export type CalculateCharaKarakasResponses = { /** * Karaka offices in descending rank with the ranking degree for each, plus the Atmakaraka and Darakaraka lifted to the top level. */ 200: CharaKarakaResponse; }; export type CalculateCharaKarakasResponse = CalculateCharaKarakasResponses[keyof CalculateCharaKarakasResponses]; export type CalculateBhavaBalaData = { body?: BhavaBalaRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/bhava-bala'; }; export type CalculateBhavaBalaErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateBhavaBalaError = CalculateBhavaBalaErrors[keyof CalculateBhavaBalaErrors]; export type CalculateBhavaBalaResponses = { /** * Bhava Bala for all twelve houses with the three components, totals in virupas and rupas, ranking, and the localized house-theme legend. */ 200: BhavaBalaResponse; }; export type CalculateBhavaBalaResponse = CalculateBhavaBalaResponses[keyof CalculateBhavaBalaResponses]; export type CalculateBhavChalitData = { body?: BhavChalitRequest; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Which signification vocabulary the houseThemes map returns. "general" gives the classical bhava significations (self, wealth, siblings, home, and so on). "finance" gives the money reading of the same twelve bhavas, so house 2 returns income and savings, 5 speculation and risk appetite, 8 sudden money and leverage, 11 gains and profits, and 12 expenses and capital outflow. Use "finance" for wealth, income, business and market timing questions in Krishnamurti Paddhati, where the significator house groups 2, 6, 10, 11 for earned income and 5, 8, 11 for speculation are read against a running dasha. Defaults to "general". */ focus?: 'general' | 'finance'; }; url: '/vedic-astrology/bhav-chalit'; }; export type CalculateBhavChalitErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateBhavChalitError = CalculateBhavChalitErrors[keyof CalculateBhavChalitErrors]; export type CalculateBhavChalitResponses = { /** * Bhav Chalit chart with the twelve Sripati bhavas, every graha in both frames, and the localized house-theme legend. */ 200: BhavChalitResponse; }; export type CalculateBhavChalitResponse = CalculateBhavChalitResponses[keyof CalculateBhavChalitResponses]; export type GetHeliacalVisibilityData = { body?: HeliacalRequest; path?: never; query?: never; url: '/vedic-astrology/heliacal'; }; export type GetHeliacalVisibilityErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetHeliacalVisibilityError = GetHeliacalVisibilityErrors[keyof GetHeliacalVisibilityErrors]; export type GetHeliacalVisibilityResponses = { /** * Heliacal visibility and the surrounding udaya and asta events for each graha. */ 200: HeliacalResponse; }; export type GetHeliacalVisibilityResponse = GetHeliacalVisibilityResponses[keyof GetHeliacalVisibilityResponses]; export type GenerateTimelineData = { body?: { /** * The single birth subject this forecast is built for. One object only, never an array. */ birthData: { /** * Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ longitude?: number; }; /** * First day of the forecast window in YYYY-MM-DD format. Defaults to today in UTC. */ startDate?: string; /** * Last day of the forecast window in YYYY-MM-DD format. Defaults to startDate plus 30 days. The window is clamped to a maximum of 90 days from startDate. */ endDate?: string; /** * Which forecast domains to include. Defaults to all three. Pass a subset to scope the timeline to one or two engines. */ domains?: Array<'western' | 'vedic' | 'biorhythm'>; /** * Drop events scoring below this significance threshold from 0 to 100. Defaults to 0, keeping all events. */ minSignificance?: number; /** * Per-domain significance multipliers applied before the significance floor and event cap. Bias which domains survive filtering and the cap. Omitted domains default to a weight of 1. Valid keys are western, vedic, and biorhythm. */ domainWeights?: { /** * Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. */ western?: number; /** * Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. */ vedic?: number; /** * Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. */ biorhythm?: number; }; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/forecast/timeline'; }; export type GenerateTimelineErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateTimelineError = GenerateTimelineErrors[keyof GenerateTimelineErrors]; export type GenerateTimelineResponses = { /** * Merged forecast timeline with time-ordered events across the requested domains */ 200: { /** * Echo of the birth subject this forecast was built for. */ birthData: { /** * Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. */ time: string; /** * Decimal UTC offset the forecast was computed with, resolved from whatever the request sent. An IANA name is resolved to the DST-correct offset for the birth date, so this is the literal number applied, never the name. */ timezone: number; /** * Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ longitude?: number; }; /** * First day of the resolved forecast window. */ startDate: string; /** * Last day of the resolved forecast window after the horizon clamp. */ endDate: string; /** * Number of events in the timeline after deduplication, filtering, and the event cap. */ count: number; /** * The merged, time-ordered forecast events across the requested domains. */ events: Array<{ /** * Calendar date of the event in YYYY-MM-DD (UTC). */ date: string; /** * Exact instant of the event as an ISO-8601 UTC datetime. Astronomical events are refined to this instant by search, not reported at a daily sample point. */ datetime: string; /** * Forecast domain. western covers transit aspects, sign ingresses, retrograde stations, eclipses, and new and full moons. vedic covers Vimshottari mahadasha, antardasha, and pratyantardasha boundaries. biorhythm covers critical days. A stable machine value, never localized, so consumers can branch on it under any language. */ domain: 'western' | 'vedic' | 'biorhythm'; /** * Event kind. transit-aspect, sign-ingress, retrograde-station, eclipse, and lunar-phase are western, dasha-change is vedic Vimshottari, critical-day is biorhythm. A stable machine value, never localized, so consumers can branch on it under any language. */ type: 'transit-aspect' | 'sign-ingress' | 'retrograde-station' | 'eclipse' | 'lunar-phase' | 'dasha-change' | 'critical-day'; /** * Primary subject of the event. A transiting planet for western events, Sun for a solar eclipse, Moon for a lunar eclipse or a new or full moon, a mahadasha, antardasha, or pratyantardasha label for dasha changes, or the critical cycle for biorhythm days. */ body: string; /** * For a transit-aspect, the natal body the transit aspects. For a sign-ingress, the zodiac sign entered, and for a lunar-phase, the zodiac sign of the New or Full Moon. Absent for other event types. */ target?: string; /** * For a transit-aspect, the angular relationship. One of conjunction, sextile, square, trine, opposition. Absent for other event types. */ aspect?: string; /** * For a transit-aspect, the separation in degrees from the exact aspect at the reported instant. Tighter orb means a more exact and significant aspect. */ orb?: number; /** * For a retrograde-station, whether the planet turns retrograde or direct. A stable machine value, never localized. Absent for other event types. */ station?: 'retrograde' | 'direct'; /** * For an eclipse, its classification. total and penumbral apply to lunar eclipses, partial applies to both, annular and total apply to solar eclipses. A stable machine value, never localized. Absent for other event types. */ kind?: 'penumbral' | 'partial' | 'annular' | 'total'; /** * For a lunar eclipse, the peak fraction from 0 to 1 of the Moon disc covered by Earth umbra. 1 for a total lunar eclipse, between 0 and 1 for a partial, 0 for a penumbral. Absent for solar eclipses and other event types. */ obscuration?: number; /** * For a lunar-phase event, which syzygy it is: new-moon (Sun-Moon conjunction) or full-moon (Sun-Moon opposition). The intermediate quarters are not emitted. A stable machine value, never localized. Absent for other event types. */ phase?: 'new-moon' | 'full-moon'; /** * Plain-language summary of the event, suitable for direct display. The only localized field: when lang is set this sentence, and the body, target, and aspect names within it, render in the requested language while the structured fields stay English. */ description: string; /** * Importance score from 0 to 100. Outer-planet exact transit aspects and mahadasha changes score highest; fast Moon events and biorhythm critical days score lower. When domainWeights is supplied this is the weighted score, rounded and clamped to 0 to 100, which is the same value the significance floor and the event cap acted on. */ significance: number; }>; }; }; export type GenerateTimelineResponse = GenerateTimelineResponses[keyof GenerateTimelineResponses]; export type ForecastTransitsData = { body?: { /** * The single birth subject this transit forecast is built for. One object only, never an array. */ birthData: { /** * Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ longitude?: number; }; /** * First day of the transit window in YYYY-MM-DD format. Defaults to today in UTC. */ startDate?: string; /** * Last day of the transit window in YYYY-MM-DD format. Defaults to startDate plus 30 days. Clamped to a maximum of 90 days from startDate. */ endDate?: string; /** * Drop transit events scoring below this significance threshold from 0 to 100. Defaults to 0. */ minSignificance?: number; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/forecast/transits'; }; export type ForecastTransitsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ForecastTransitsError = ForecastTransitsErrors[keyof ForecastTransitsErrors]; export type ForecastTransitsResponses = { /** * Time-ordered western forecast events: aspects, ingresses, stations, eclipses, and moon phases */ 200: { /** * Echo of the birth subject this forecast was built for. */ birthData: { /** * Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. */ time: string; /** * Decimal UTC offset the forecast was computed with, resolved from whatever the request sent. An IANA name is resolved to the DST-correct offset for the birth date, so this is the literal number applied, never the name. */ timezone: number; /** * Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ longitude?: number; }; /** * First day of the resolved forecast window. */ startDate: string; /** * Last day of the resolved forecast window after the horizon clamp. */ endDate: string; /** * Number of events in the timeline after deduplication, filtering, and the event cap. */ count: number; /** * The merged, time-ordered forecast events across the requested domains. */ events: Array<{ /** * Calendar date of the event in YYYY-MM-DD (UTC). */ date: string; /** * Exact instant of the event as an ISO-8601 UTC datetime. Astronomical events are refined to this instant by search, not reported at a daily sample point. */ datetime: string; /** * Forecast domain. western covers transit aspects, sign ingresses, retrograde stations, eclipses, and new and full moons. vedic covers Vimshottari mahadasha, antardasha, and pratyantardasha boundaries. biorhythm covers critical days. A stable machine value, never localized, so consumers can branch on it under any language. */ domain: 'western' | 'vedic' | 'biorhythm'; /** * Event kind. transit-aspect, sign-ingress, retrograde-station, eclipse, and lunar-phase are western, dasha-change is vedic Vimshottari, critical-day is biorhythm. A stable machine value, never localized, so consumers can branch on it under any language. */ type: 'transit-aspect' | 'sign-ingress' | 'retrograde-station' | 'eclipse' | 'lunar-phase' | 'dasha-change' | 'critical-day'; /** * Primary subject of the event. A transiting planet for western events, Sun for a solar eclipse, Moon for a lunar eclipse or a new or full moon, a mahadasha, antardasha, or pratyantardasha label for dasha changes, or the critical cycle for biorhythm days. */ body: string; /** * For a transit-aspect, the natal body the transit aspects. For a sign-ingress, the zodiac sign entered, and for a lunar-phase, the zodiac sign of the New or Full Moon. Absent for other event types. */ target?: string; /** * For a transit-aspect, the angular relationship. One of conjunction, sextile, square, trine, opposition. Absent for other event types. */ aspect?: string; /** * For a transit-aspect, the separation in degrees from the exact aspect at the reported instant. Tighter orb means a more exact and significant aspect. */ orb?: number; /** * For a retrograde-station, whether the planet turns retrograde or direct. A stable machine value, never localized. Absent for other event types. */ station?: 'retrograde' | 'direct'; /** * For an eclipse, its classification. total and penumbral apply to lunar eclipses, partial applies to both, annular and total apply to solar eclipses. A stable machine value, never localized. Absent for other event types. */ kind?: 'penumbral' | 'partial' | 'annular' | 'total'; /** * For a lunar eclipse, the peak fraction from 0 to 1 of the Moon disc covered by Earth umbra. 1 for a total lunar eclipse, between 0 and 1 for a partial, 0 for a penumbral. Absent for solar eclipses and other event types. */ obscuration?: number; /** * For a lunar-phase event, which syzygy it is: new-moon (Sun-Moon conjunction) or full-moon (Sun-Moon opposition). The intermediate quarters are not emitted. A stable machine value, never localized. Absent for other event types. */ phase?: 'new-moon' | 'full-moon'; /** * Plain-language summary of the event, suitable for direct display. The only localized field: when lang is set this sentence, and the body, target, and aspect names within it, render in the requested language while the structured fields stay English. */ description: string; /** * Importance score from 0 to 100. Outer-planet exact transit aspects and mahadasha changes score highest; fast Moon events and biorhythm critical days score lower. When domainWeights is supplied this is the weighted score, rounded and clamped to 0 to 100, which is the same value the significance floor and the event cap acted on. */ significance: number; }>; }; }; export type ForecastTransitsResponse = ForecastTransitsResponses[keyof ForecastTransitsResponses]; export type FindSignificantDatesData = { body?: { /** * The single birth subject this forecast is built for. One object only, never an array. */ birthData: { /** * Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ longitude?: number; }; /** * First day of the window in YYYY-MM-DD format. Defaults to today in UTC. */ startDate?: string; /** * Last day of the window in YYYY-MM-DD format. Defaults to startDate plus 30 days. Clamped to a maximum of 90 days from startDate. */ endDate?: string; /** * Which forecast domains to consider before filtering by significance. Defaults to all three. */ domains?: Array<'western' | 'vedic' | 'biorhythm'>; /** * Significance floor from 0 to 100 for what counts as a significant date. Defaults to 70. */ minSignificance?: number; /** * Per-domain significance multipliers applied before the significance floor and event cap. Bias which domains survive filtering and the cap. Omitted domains default to a weight of 1. Valid keys are western, vedic, and biorhythm. */ domainWeights?: { /** * Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. */ western?: number; /** * Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. */ vedic?: number; /** * Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. */ biorhythm?: number; }; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/forecast/significant-dates'; }; export type FindSignificantDatesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type FindSignificantDatesError = FindSignificantDatesErrors[keyof FindSignificantDatesErrors]; export type FindSignificantDatesResponses = { /** * High-significance forecast events across the requested domains */ 200: { /** * Echo of the birth subject this forecast was built for. */ birthData: { /** * Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. */ time: string; /** * Decimal UTC offset the forecast was computed with, resolved from whatever the request sent. An IANA name is resolved to the DST-correct offset for the birth date, so this is the literal number applied, never the name. */ timezone: number; /** * Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ longitude?: number; }; /** * First day of the resolved forecast window. */ startDate: string; /** * Last day of the resolved forecast window after the horizon clamp. */ endDate: string; /** * Number of events in the timeline after deduplication, filtering, and the event cap. */ count: number; /** * The merged, time-ordered forecast events across the requested domains. */ events: Array<{ /** * Calendar date of the event in YYYY-MM-DD (UTC). */ date: string; /** * Exact instant of the event as an ISO-8601 UTC datetime. Astronomical events are refined to this instant by search, not reported at a daily sample point. */ datetime: string; /** * Forecast domain. western covers transit aspects, sign ingresses, retrograde stations, eclipses, and new and full moons. vedic covers Vimshottari mahadasha, antardasha, and pratyantardasha boundaries. biorhythm covers critical days. A stable machine value, never localized, so consumers can branch on it under any language. */ domain: 'western' | 'vedic' | 'biorhythm'; /** * Event kind. transit-aspect, sign-ingress, retrograde-station, eclipse, and lunar-phase are western, dasha-change is vedic Vimshottari, critical-day is biorhythm. A stable machine value, never localized, so consumers can branch on it under any language. */ type: 'transit-aspect' | 'sign-ingress' | 'retrograde-station' | 'eclipse' | 'lunar-phase' | 'dasha-change' | 'critical-day'; /** * Primary subject of the event. A transiting planet for western events, Sun for a solar eclipse, Moon for a lunar eclipse or a new or full moon, a mahadasha, antardasha, or pratyantardasha label for dasha changes, or the critical cycle for biorhythm days. */ body: string; /** * For a transit-aspect, the natal body the transit aspects. For a sign-ingress, the zodiac sign entered, and for a lunar-phase, the zodiac sign of the New or Full Moon. Absent for other event types. */ target?: string; /** * For a transit-aspect, the angular relationship. One of conjunction, sextile, square, trine, opposition. Absent for other event types. */ aspect?: string; /** * For a transit-aspect, the separation in degrees from the exact aspect at the reported instant. Tighter orb means a more exact and significant aspect. */ orb?: number; /** * For a retrograde-station, whether the planet turns retrograde or direct. A stable machine value, never localized. Absent for other event types. */ station?: 'retrograde' | 'direct'; /** * For an eclipse, its classification. total and penumbral apply to lunar eclipses, partial applies to both, annular and total apply to solar eclipses. A stable machine value, never localized. Absent for other event types. */ kind?: 'penumbral' | 'partial' | 'annular' | 'total'; /** * For a lunar eclipse, the peak fraction from 0 to 1 of the Moon disc covered by Earth umbra. 1 for a total lunar eclipse, between 0 and 1 for a partial, 0 for a penumbral. Absent for solar eclipses and other event types. */ obscuration?: number; /** * For a lunar-phase event, which syzygy it is: new-moon (Sun-Moon conjunction) or full-moon (Sun-Moon opposition). The intermediate quarters are not emitted. A stable machine value, never localized. Absent for other event types. */ phase?: 'new-moon' | 'full-moon'; /** * Plain-language summary of the event, suitable for direct display. The only localized field: when lang is set this sentence, and the body, target, and aspect names within it, render in the requested language while the structured fields stay English. */ description: string; /** * Importance score from 0 to 100. Outer-planet exact transit aspects and mahadasha changes score highest; fast Moon events and biorhythm critical days score lower. When domainWeights is supplied this is the weighted score, rounded and clamped to 0 to 100, which is the same value the significance floor and the event cap acted on. */ significance: number; }>; }; }; export type FindSignificantDatesResponse = FindSignificantDatesResponses[keyof FindSignificantDatesResponses]; export type GenerateDigestData = { body?: { /** * The single birth subject this digest is built for. One object only, never an array. */ birthData: { /** * Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ longitude?: number; }; /** * Start anchor for every window in YYYY-MM-DD format. The next 24h, 7d, 30d, and 90d windows are measured forward from this date at 00:00:00 UTC. Defaults to today in UTC. */ startDate?: string; /** * Which forecast domains to include before rolling up the windows. Defaults to all three. */ domains?: Array<'western' | 'vedic' | 'biorhythm'>; /** * Drop events scoring below this significance threshold from 0 to 100 before the rollup. Defaults to 0. */ minSignificance?: number; /** * Per-domain significance multipliers applied before the significance floor and event cap. Bias which domains survive filtering and the cap. Omitted domains default to a weight of 1. Valid keys are western, vedic, and biorhythm. */ domainWeights?: { /** * Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. */ western?: number; /** * Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. */ vedic?: number; /** * Multiplier for this domain significance. 1 leaves it unchanged, above 1 promotes the domain, below 1 demotes it. */ biorhythm?: number; }; /** * Number of highest-significance events to surface per window. Defaults to 3, capped at 20. */ top?: number; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/forecast/digest'; }; export type GenerateDigestErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateDigestError = GenerateDigestErrors[keyof GenerateDigestErrors]; export type GenerateDigestResponses = { /** * Pre-summarized forecast windows: next 24h, 7d, 30d, and 90d rollups */ 200: { /** * Echo of the birth subject this digest was built for. */ birthData: { /** * Birth date in YYYY-MM-DD format. Anchors the natal chart and the Vimshottari dasha sequence. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters for the natal positions the transit aspects are measured against. */ time: string; /** * Decimal UTC offset the forecast was computed with, resolved from whatever the request sent. An IANA name is resolved to the DST-correct offset for the birth date, so this is the literal number applied, never the name. */ timezone: number; /** * Birth latitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the timeline. Defaults to 0. */ longitude?: number; }; /** * Start anchor every window is measured from. */ startDate: string; /** * Last day of the resolved 90 day horizon the timeline was built over before slicing. */ endDate: string; /** * The four rollups in ascending window length: next 24h, 7d, 30d, and 90d from the start anchor. */ windows: Array<{ /** * Length of this window in days forward from the start anchor. One of 1, 7, 30, 90. */ days: number; /** * Inclusive lower bound of the window as an ISO-8601 UTC datetime, the start anchor. */ from: string; /** * Exclusive upper bound of the window as an ISO-8601 UTC datetime, the start anchor plus the window length. */ to: string; /** * Number of events whose datetime falls inside this window. */ count: number; /** * Count of events in this window broken down by domain. Only domains with at least one event in the window are present. The values sum to count. */ byDomain: { /** * Number of events in this window produced by this forecast domain. Absent when the domain contributed nothing, so a zero is never written. */ western?: number; /** * Number of events in this window produced by this forecast domain. Absent when the domain contributed nothing, so a zero is never written. */ vedic?: number; /** * Number of events in this window produced by this forecast domain. Absent when the domain contributed nothing, so a zero is never written. */ biorhythm?: number; }; /** * Count of events in this window broken down by event type. Only types with at least one event in the window are present. The values sum to count. */ byType: { /** * Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. */ 'transit-aspect'?: number; /** * Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. */ 'sign-ingress'?: number; /** * Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. */ 'retrograde-station'?: number; /** * Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. */ eclipse?: number; /** * Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. */ 'lunar-phase'?: number; /** * Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. */ 'dasha-change'?: number; /** * Number of events in this window of this event type. Absent when the type did not occur, so a zero is never written. */ 'critical-day'?: number; }; /** * The highest-significance events in this window, most significant first, up to the requested top count. The same TimelineEvent shape as the timeline endpoints. */ top: Array<{ /** * Calendar date of the event in YYYY-MM-DD (UTC). */ date: string; /** * Exact instant of the event as an ISO-8601 UTC datetime. Astronomical events are refined to this instant by search, not reported at a daily sample point. */ datetime: string; /** * Forecast domain. western covers transit aspects, sign ingresses, retrograde stations, eclipses, and new and full moons. vedic covers Vimshottari mahadasha, antardasha, and pratyantardasha boundaries. biorhythm covers critical days. A stable machine value, never localized, so consumers can branch on it under any language. */ domain: 'western' | 'vedic' | 'biorhythm'; /** * Event kind. transit-aspect, sign-ingress, retrograde-station, eclipse, and lunar-phase are western, dasha-change is vedic Vimshottari, critical-day is biorhythm. A stable machine value, never localized, so consumers can branch on it under any language. */ type: 'transit-aspect' | 'sign-ingress' | 'retrograde-station' | 'eclipse' | 'lunar-phase' | 'dasha-change' | 'critical-day'; /** * Primary subject of the event. A transiting planet for western events, Sun for a solar eclipse, Moon for a lunar eclipse or a new or full moon, a mahadasha, antardasha, or pratyantardasha label for dasha changes, or the critical cycle for biorhythm days. */ body: string; /** * For a transit-aspect, the natal body the transit aspects. For a sign-ingress, the zodiac sign entered, and for a lunar-phase, the zodiac sign of the New or Full Moon. Absent for other event types. */ target?: string; /** * For a transit-aspect, the angular relationship. One of conjunction, sextile, square, trine, opposition. Absent for other event types. */ aspect?: string; /** * For a transit-aspect, the separation in degrees from the exact aspect at the reported instant. Tighter orb means a more exact and significant aspect. */ orb?: number; /** * For a retrograde-station, whether the planet turns retrograde or direct. A stable machine value, never localized. Absent for other event types. */ station?: 'retrograde' | 'direct'; /** * For an eclipse, its classification. total and penumbral apply to lunar eclipses, partial applies to both, annular and total apply to solar eclipses. A stable machine value, never localized. Absent for other event types. */ kind?: 'penumbral' | 'partial' | 'annular' | 'total'; /** * For a lunar eclipse, the peak fraction from 0 to 1 of the Moon disc covered by Earth umbra. 1 for a total lunar eclipse, between 0 and 1 for a partial, 0 for a penumbral. Absent for solar eclipses and other event types. */ obscuration?: number; /** * For a lunar-phase event, which syzygy it is: new-moon (Sun-Moon conjunction) or full-moon (Sun-Moon opposition). The intermediate quarters are not emitted. A stable machine value, never localized. Absent for other event types. */ phase?: 'new-moon' | 'full-moon'; /** * Plain-language summary of the event, suitable for direct display. The only localized field: when lang is set this sentence, and the body, target, and aspect names within it, render in the requested language while the structured fields stay English. */ description: string; /** * Importance score from 0 to 100. Outer-planet exact transit aspects and mahadasha changes score highest; fast Moon events and biorhythm critical days score lower. When domainWeights is supplied this is the weighted score, rounded and clamped to 0 to 100, which is the same value the significance floor and the event cap acted on. */ significance: number; }>; }>; }; }; export type GenerateDigestResponse = GenerateDigestResponses[keyof GenerateDigestResponses]; export type ForecastSolarReturnData = { body?: { /** * Birth date in YYYY-MM-DD format. Anchors the natal Sun longitude the transiting Sun returns to each year. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Pins the exact natal Sun position that defines the solar return moment. */ time: string; /** * Year to cast the solar return for. The chart is erected for the moment in this year when the transiting Sun returns to the natal Sun longitude, on or within a day of the birthday. */ year: number; /** * Latitude of the solar return location in decimal degrees. The solar return is location-sensitive: use the birthplace to anchor the chart to natal geography, or the current city for a relocated solar return. */ latitude: number; /** * Longitude of the solar return location in decimal degrees. Sets the local sidereal time, so it drives the Ascendant, Midheaven, and house cusps of the return chart. */ longitude: number; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * House system for the return chart. placidus is the Western default. whole-sign, equal, and koch are also supported. */ houseSystem?: 'placidus' | 'whole-sign' | 'equal' | 'koch'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/forecast/solar-return'; }; export type ForecastSolarReturnErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ForecastSolarReturnError = ForecastSolarReturnErrors[keyof ForecastSolarReturnErrors]; export type ForecastSolarReturnResponses = { /** * Solar return chart cast for the requested year and location */ 200: { /** * Echo of the birth date used to find the natal Sun longitude. */ birthDate: string; /** * Exact solar return moment, when the transiting Sun returns to the natal Sun longitude, formatted in the requested timezone. The astrological birthday for the year. */ solarReturnDate: string; /** * Year of this solar return. The chart covers the period to the next birthday. */ solarReturnYear: number; /** * Location the return chart was cast for. The Ascendant and house cusps change with this location, the basis of the relocated solar return technique. */ location: { /** * Latitude used for the return chart house cusps and Ascendant. */ latitude: number; /** * Longitude used for local sidereal time and the Midheaven. */ longitude: number; /** * Decimal timezone offset applied to the output datetime. */ timezone: number; }; /** * The natal Sun position whose annual return defines this chart. */ natalSunPosition: { /** * Natal Sun ecliptic longitude in degrees from 0 to 360 that the Sun returns to. */ longitude: number; /** * Tropical zodiac sign of the natal Sun. */ sign: string; /** * Degree within the sign from 0 to 29.999 that the Sun returns to. */ degree: number; }; /** * Full chart erected for the solar return moment: all bodies with house placements, the 12 house cusps, aspects, Part of Fortune, and Vertex in the tropical zodiac. */ chart: { /** * Birth details used to generate this chart. */ birthDetails: { /** * Birth date in YYYY-MM-DD format. Determines planetary positions for the specific calendar day. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Determines the Ascendant (rising sign) and house cusps. Use 12:00:00 if unknown. */ time: string; /** * Birth location latitude in decimal degrees (-90 to 90). Positive = North, negative = South. */ latitude: number; /** * Birth location longitude in decimal degrees (-180 to 180). Positive = East, negative = West. */ longitude: number; /** * Timezone offset from UTC in decimal hours. Examples: New York = -5, London = 0, India = 5.5, Tokyo = 9. */ timezone: number; }; /** * All 14 celestial bodies in the tropical zodiac with house placements: the 10 classical planets (Sun through Pluto), the lunar nodes (North Node, South Node, in the requested `nodeType` convention), Chiron, and Black Moon Lilith. */ planets: Array<{ /** * Body name. One of the 10 classical planets (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto), the lunar nodes (North Node, South Node), Chiron, or Black Moon Lilith (the mean lunar apogee). The nodes follow the request `nodeType`, which defaults to the true (osculating) node; pass "mean" for the smoothed node. The two differ by up to about 1.8 degrees and no other body is affected. */ name: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Tropical ecliptic longitude in degrees (0-360). Primary coordinate for zodiac sign and aspect calculations. */ longitude: number; /** * Ecliptic latitude in degrees. Near zero for most planets, varies for the Moon and Pluto, and reaches up to about 5 degrees for Black Moon Lilith (projected from the inclined mean lunar orbit). */ latitude: number; /** * Tropical zodiac sign this planet occupies. Determined by 30-degree divisions of ecliptic longitude. */ sign: string; /** * Degree within the zodiac sign (0-29.999). Indicates how far the planet has progressed through the sign. */ degree: number; /** * House placement (1-12). Determined by the selected house system and birth location. */ house: number; /** * Daily motion in degrees per day. Negative values indicate retrograde motion. */ speed: number; /** * Whether the planet appears to move backward from Earth perspective. Retrograde periods signal review and introspection. */ isRetrograde: boolean; }>; /** * All 12 house cusps calculated using the selected house system. */ houses: Array<{ /** * House number (1-12). Each house governs specific life themes in Western astrology. */ number: number; /** * Ecliptic longitude of this house cusp in degrees (0-360). */ longitude: number; /** * Zodiac sign on this house cusp. Colors the themes of this life area. */ sign: string; /** * Degree within the zodiac sign on this cusp (0-29.999). */ degree: number; }>; /** * House system used for this chart (placidus, whole-sign, equal, or koch). */ houseSystem: 'placidus' | 'whole-sign' | 'equal' | 'koch'; /** * All planetary aspects found in this chart with orbs, strength, and applying/separating status. */ aspects: Array<{ /** * First planet in the aspect pair. */ planet1: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Second planet in the aspect pair. */ planet2: 'Sun' | 'Moon' | 'Mercury' | 'Venus' | 'Mars' | 'Jupiter' | 'Saturn' | 'Uranus' | 'Neptune' | 'Pluto' | 'North Node' | 'South Node' | 'Chiron' | 'Black Moon Lilith'; /** * Aspect type. Major: conjunction (0), opposition (180), trine (120), square (90), sextile (60). Minor: semi-sextile, quincunx, semi-square, sesquiquadrate. */ type: 'CONJUNCTION' | 'OPPOSITION' | 'TRINE' | 'SQUARE' | 'SEXTILE' | 'SEMI_SEXTILE' | 'QUINCUNX' | 'SEMI_SQUARE' | 'SESQUIQUADRATE'; /** * Exact angular separation that defines this aspect type in degrees. */ angle: number; /** * Deviation from exact aspect in degrees. Tighter orb means stronger influence. */ orb: number; /** * Whether the aspect is applying (planets moving toward exact) or separating (moving apart). Applying aspects grow stronger. */ isApplying: boolean; /** * Aspect strength percentage (0-100). Based on orb tightness relative to the allowed maximum. */ strength: number; /** * Aspect nature. Harmonious (trine, sextile) flows easily. Challenging (square, opposition) creates tension and growth. Neutral (conjunction) blends energies. Always English, whatever the lang parameter says: it is an identifier consumers switch and style on. Use interpretationLocalized for anything a reader sees. */ interpretation: 'harmonious' | 'challenging' | 'neutral'; }>; /** * Part of Fortune (Lot of Fortune). A point derived from the Ascendant and the two luminaries that marks an area of ease, vitality, and material wellbeing in the chart. */ partOfFortune: { /** * Zodiac sign holding the Part of Fortune. */ sign: string; /** * Degree within the Part of Fortune sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Part of Fortune (0-360). */ longitude: number; /** * House containing this point, resolved against the same cusps as `planets[].house` and using the requested house system. Read this field rather than inferring a house from the sign: the two disagree whenever a house spans more than one sign, which is most of the time outside Whole Sign. */ house: number; /** * Chart sect used for the calculation. Day (diurnal) when the Sun is above the horizon, night (nocturnal) when below. Day charts use Ascendant plus Moon minus Sun, night charts use Ascendant plus Sun minus Moon. */ sect: 'day' | 'night'; }; /** * Vertex. The western intersection of the prime vertical with the ecliptic, often read as a point of fated encounters and turning-point relationships. The opposite point is the Anti-Vertex. */ vertex: { /** * Zodiac sign holding the Vertex. */ sign: string; /** * Degree within the Vertex sign (0-29.999). */ degree: number; /** * Absolute ecliptic longitude of the Vertex (0-360). */ longitude: number; /** * House containing this point, resolved against the same cusps as `planets[].house` and using the requested house system. Read this field rather than inferring a house from the sign: the two disagree whenever a house spans more than one sign, which is most of the time outside Whole Sign. */ house: number; }; }; }; }; export type ForecastSolarReturnResponse = ForecastSolarReturnResponses[keyof ForecastSolarReturnResponses]; export type GenerateBodygraphData = { body?: { /** * Birth date in YYYY-MM-DD format. The anchor for both the Personality activations at birth and the Design activations 88 degrees of solar arc earlier. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters: the profile lines and gate boundaries shift with the exact minute of birth. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the bodygraph, which depends only on ecliptic longitudes. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the bodygraph. Defaults to 0. */ longitude?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node activations. True is what professional Human Design software uses (HumanDesign.ai, Total Human Design) and is the value RoxyAPI verifies against, so leave it unset for a standard chart. It matters only when a node sits on a gate boundary, where the choice can move a node gate and, rarely, change the completed channels and therefore the type, authority or definition. If another calculator shows a different type, it is almost certainly using the mean node: pass "mean" to match it. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/human-design/bodygraph'; }; export type GenerateBodygraphErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateBodygraphError = GenerateBodygraphErrors[keyof GenerateBodygraphErrors]; export type GenerateBodygraphResponses = { /** * Complete bodygraph with type, authority, profile, centers, channels, and gates */ 200: { /** * Human Design energy type. One of Manifestor, Generator, Manifesting Generator, Projector, Reflector. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use typeLocalized for anything a reader sees. */ type: string; /** * Energy type name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ typeLocalized?: string; /** * What the aura of this type does and how it is designed to engage life. The grounding text for the type label, so a consuming agent does not have to supply the meaning itself. */ typeDescription: string; /** * The aura mechanic of the type: how the energy field itself operates, for example open and enveloping, or closed and repelling. */ aura: string; /** * The aura strategy for engaging life correctly for this type. Always English, whatever the lang parameter says. Use strategyLocalized for anything a reader sees. */ strategy: string; /** * Strategy name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ strategyLocalized?: string; /** * How to actually apply the strategy. The strategy field alone is a bare label such as Respond or Inform; this is the operating instruction behind it. */ strategyDescription: string; /** * Inner authority for decision making. One of Emotional, Sacral, Splenic, Ego, Self-Projected, Mental, Lunar. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use authorityLocalized for anything a reader sees. */ authority: string; /** * Inner authority name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ authorityLocalized?: string; /** * How the decision is made, the timing it requires, and the characteristic trap. Inner authority is the most actionable output of a Human Design chart, so this is the field to lean on when grounding a reading. */ authorityDescription: string; /** * The signature feeling of living in alignment with the type. Always English, whatever the lang parameter says. Use signatureLocalized for anything a reader sees. */ signature: string; /** * Signature theme name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signatureLocalized?: string; /** * The not-self theme, the recurring feeling that signals being out of alignment. Always English, whatever the lang parameter says. Use notSelfLocalized for anything a reader sees. */ notSelf: string; /** * Not-self theme name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ notSelfLocalized?: string; /** * Profile in conscious/unconscious form from the Personality Sun line over the Design Sun line. */ profile: string; /** * The two line keynotes the profile is built from, conscious over unconscious, so the profile is readable without a separate lookup. */ profileKeynotes: { /** * Line number 1 to 6 of the conscious Personality Sun, the first digit of the profile. */ personalityLine: number; /** * Line number 1 to 6 of the unconscious Design Sun, the second digit of the profile. */ designLine: number; /** * Keynote of the conscious Personality line. The half of the life role the person is aware of and can speak to. */ personality: string; /** * Keynote of the unconscious Design line. The half of the life role others see operating in the body, which the person does not directly experience. */ design: string; }; /** * Meaning of the combined profile. A profile is not the sum of its two lines: 6/2 has its own meaning that neither the line 6 nor the line 2 keynote carries alone. */ profileDescription: string; /** * Definition type from the number of connected components among defined centers. One of None, Single, Split, Triple Split, Quadruple Split. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use definitionLocalized for anything a reader sees. */ definition: string; /** * Definition type name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ definitionLocalized?: string; /** * How energy flows through the defined centers in this configuration, and what the configuration needs. For a split, this is where the bridging gates of other people matter. */ definitionDescription: string; /** * What the two chart sides are: personality is the conscious mind side, design is the unconscious body side computed 88 degrees of solar arc before birth. Returned once at the top level rather than repeated across all 26 activations. */ sides: { [key: string]: string; }; /** * The incarnation cross built from the four cardinal gates and the profile angle. */ incarnationCross: { /** * The four cardinal gates of the cross: Personality Sun, Personality Earth, Design Sun, Design Earth. */ gates: Array; /** * Cross angle. One of Right Angle, Juxtaposition, Left Angle. Always English, whatever the lang parameter says. Use angleLocalized for anything a reader sees. */ angle: string; /** * Cross angle name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ angleLocalized?: string; /** * Short code for the angle. One of RAX, JXT, LAX. */ angleCode: string; /** * Canonical published name of the incarnation cross, determined by the Personality Sun gate and the angle. Falls back to a name composed from the angle and the four gates if no canonical name exists. */ name: string; /** * The life theme of the cross, synthesized from its four gates and the orientation the angle gives them. The same Sun gate under a different angle is a genuinely different theme: Right Angle is personal destiny, Left Angle is worked out through other people, Juxtaposition is a fixed fate. */ description?: string; }; /** * All nine centers with their defined state and active gates. */ centers: Array<{ /** * Center identifier. One of head, ajna, throat, g, heart, sacral, solar-plexus, spleen, root. */ id: string; /** * Display name of the center. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use nameLocalized for anything a reader sees. */ name: string; /** * Center name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Whether the center is defined. A defined center is a consistent source of energy or awareness; an undefined center is open and conditioned by others. */ defined: boolean; /** * Whether this is a motor center (energy source). The four motors are Heart, Sacral, Solar Plexus, and Root. */ motor: boolean; /** * Whether this is an awareness center. The three awareness centers are Ajna, Solar Plexus, and Spleen. */ awareness: boolean; /** * Theme text describing the center in its current defined or undefined state. */ theme: string; /** * The conditioning trap of this center when it is open. Returned on every center so a consumer can surface it the moment `defined` is false, which is where the not-self operates. */ notSelfQuestion: string; /** * The gland, organ, or system this center corresponds to in the body. */ biology: string; /** * Active gate numbers that sit in this center. */ gates: Array; }>; /** * The defined channels where both gates are activated. */ channels: Array<{ /** * First gate of the channel. */ gateA: number; /** * Second gate of the channel. */ gateB: number; /** * Name of the defined channel. Always English, whatever the lang parameter says. Use nameLocalized for anything a reader sees. */ name: string; /** * Channel name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Circuit family of the channel. One of Individual, Collective, Tribal. Always English, whatever the lang parameter says. Use circuitLocalized for anything a reader sees. */ circuit: string; /** * Circuit family name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ circuitLocalized?: string; /** * The two centers this channel connects and defines. */ centers: Array; /** * What this channel wires between its two centers and the nature of the energy it carries. */ description: string; /** * What the circuit family of this channel governs. */ circuitDescription: string; }>; /** * All 26 activations, 13 Personality and 13 Design. */ gates: Array<{ /** * Activating body. One of Sun, Earth, Moon, North Node, South Node, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto. Always English, whatever the lang parameter says, so it stays safe to compare against in code and to key a glyph table on. Use planetLocalized for anything a reader sees. */ planet: string; /** * Activating body name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planetLocalized?: string; /** * Chart side. personality is the conscious birth-moment activation, design is the unconscious activation 88 degrees of solar arc before birth. */ side: string; /** * Human Design gate number from 1 to 64 that this activation falls in. */ gate: number; /** * Line number from 1 to 6 within the gate, setting the line keynote and the profile. */ line: number; /** * Human Design keynote name of the gate, describing its bodygraph function. Always English, whatever the lang parameter says. Use gateNameLocalized for anything a reader sees. */ gateName: string; /** * Gate keynote name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ gateNameLocalized?: string; /** * Bodygraph function of the gate: what it does in the center it sits in and the channel it forms. This is NOT the meaning of the I-Ching hexagram that shares its number. They share a number, not a definition. */ gateDescription: string; /** * Meaning of this gate at this specific line, one of 384. The finest interpretive layer in the chart and the one that makes a reading specific rather than generic. This is not the six abstract line archetypes: gate 41 line 3 carries its own meaning that neither the gate keynote nor the line-3 archetype holds alone. */ lineMeaning: string; /** * What this planetary activation contributes in Human Design specifically, which is not its meaning in western astrology. */ planetDescription: string; /** * Cross-reference to the I-Ching hexagram that shares this gate number. */ ichingHexagram: { /** * I-Ching hexagram number, identical to the gate number it corresponds to. */ number: number; /** * English name of the corresponding I-Ching hexagram. */ english: string; }; }>; }; }; export type GenerateBodygraphResponse = GenerateBodygraphResponses[keyof GenerateBodygraphResponses]; export type CalculateConnectionData = { body?: { /** * Birth moment of the first person in the connection. */ personA: { /** * Birth date in YYYY-MM-DD format. The anchor for both the Personality activations at birth and the Design activations 88 degrees of solar arc earlier. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters: the profile lines and gate boundaries shift with the exact minute of birth. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the bodygraph, which depends only on ecliptic longitudes. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the bodygraph. Defaults to 0. */ longitude?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node activations. True is what professional Human Design software uses (HumanDesign.ai, Total Human Design) and is the value RoxyAPI verifies against, so leave it unset for a standard chart. It matters only when a node sits on a gate boundary, where the choice can move a node gate and, rarely, change the completed channels and therefore the type, authority or definition. If another calculator shows a different type, it is almost certainly using the mean node: pass "mean" to match it. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; /** * Birth moment of the second person in the connection. */ personB: { /** * Birth date in YYYY-MM-DD format. The anchor for both the Personality activations at birth and the Design activations 88 degrees of solar arc earlier. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters: the profile lines and gate boundaries shift with the exact minute of birth. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the bodygraph, which depends only on ecliptic longitudes. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the bodygraph. Defaults to 0. */ longitude?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node activations. True is what professional Human Design software uses (HumanDesign.ai, Total Human Design) and is the value RoxyAPI verifies against, so leave it unset for a standard chart. It matters only when a node sits on a gate boundary, where the choice can move a node gate and, rarely, change the completed channels and therefore the type, authority or definition. If another calculator shows a different type, it is almost certainly using the mean node: pass "mean" to match it. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/human-design/connection'; }; export type CalculateConnectionErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateConnectionError = CalculateConnectionErrors[keyof CalculateConnectionErrors]; export type CalculateConnectionResponses = { /** * Connection chart with per-channel dynamics, combined centers, definition, and a dynamic count */ 200: { /** * Total number of connected channels between the two people. Equals the length of channels and the sum of the summary counts. */ totalChannels: number; /** * Every connected channel between the two people with its dynamic. A channel is connected when the two people together hold both of its gates. */ channels: Array<{ /** * First gate of the channel. */ gateA: number; /** * Second gate of the channel. */ gateB: number; /** * Name of the channel whose connection dynamic is reported. Always English, whatever the lang parameter says. Use nameLocalized for anything a reader sees. */ name: string; /** * Channel name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Circuit family of the channel. One of Individual, Collective, Tribal. Always English, whatever the lang parameter says. Use circuitLocalized for anything a reader sees. */ circuit: string; /** * Circuit family name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ circuitLocalized?: string; /** * The two centers this channel connects in the bodygraph. */ centers: Array; /** * Connection dynamic for this channel. Electromagnetic means each person holds one of the two gates and the channel completes only together, the classic point of attraction. Dominance means one person holds both gates and the other holds neither, a one-way conditioning. Compromise means one person holds both gates and the other holds a single hanging gate. Companionship means both people independently hold both gates, a shared and familiar frequency. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use dynamicLocalized for anything a reader sees. */ dynamic: string; /** * Connection dynamic name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ dynamicLocalized?: string; /** * Which of the channel two gates person A holds, from one to both. */ personAGates: Array; /** * Which of the channel two gates person B holds, from one to both. */ personBGates: Array; }>; /** * All nine centers with their defined state in the combined connection bodygraph and which person defines each. */ centers: Array<{ /** * Center identifier. One of head, ajna, throat, g, heart, sacral, solar-plexus, spleen, root. */ id: string; /** * Display name of the center. Always English, whatever the lang parameter says. Use nameLocalized for anything a reader sees. */ name: string; /** * Center name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Whether the center is defined in the combined connection bodygraph, where a channel counts as defined when the two people together hold both of its gates. */ defined: boolean; /** * Who defines this center in their own chart. A, B, both, or empty when the center is open in both individual charts. */ definedBy: Array; }>; /** * Definition of the combined connection bodygraph from connected components among its defined centers. One of None, Single, Split, Triple Split, Quadruple Split. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use combinedDefinitionLocalized for anything a reader sees. */ combinedDefinition: string; /** * Combined definition name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ combinedDefinitionLocalized?: string; /** * Count of each connection dynamic across all connected channels. */ summary: { /** * Count of electromagnetic channels, the points of mutual attraction. */ electromagnetic: number; /** * Count of dominance channels, where one person conditions the other one way. */ dominance: number; /** * Count of compromise channels, a full channel meeting a single hanging gate. */ compromise: number; /** * Count of companionship channels, where both people share the whole channel. */ companionship: number; }; }; }; export type CalculateConnectionResponse = CalculateConnectionResponses[keyof CalculateConnectionResponses]; export type CalculatePentaData = { body?: { /** * Birth moments of the three to five people in the group. Below three no Penta forms; above five a second Penta emerges. */ members: Array<{ /** * Birth date in YYYY-MM-DD format. The anchor for both the Personality activations at birth and the Design activations 88 degrees of solar arc earlier. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters: the profile lines and gate boundaries shift with the exact minute of birth. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the bodygraph, which depends only on ecliptic longitudes. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the bodygraph. Defaults to 0. */ longitude?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node activations. True is what professional Human Design software uses (HumanDesign.ai, Total Human Design) and is the value RoxyAPI verifies against, so leave it unset for a standard chart. It matters only when a node sits on a gate boundary, where the choice can move a node gate and, rarely, change the completed channels and therefore the type, authority or definition. If another calculator shows a different type, it is almost certainly using the mean node: pass "mean" to match it. Defaults to "true". */ nodeType?: 'mean' | 'true'; }>; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/human-design/penta'; }; export type CalculatePentaErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculatePentaError = CalculatePentaErrors[keyof CalculatePentaErrors]; export type CalculatePentaResponses = { /** * Penta chart with per-channel Strengths, per-gate fill state, and a group summary */ 200: { /** * Number of people in the group, always between 3 and 5. */ memberCount: number; /** * The six channels of the Penta with their defined Strength state and which members supply each gate. Three upper channels run G to Throat (The Alpha, Inspiration, The Prodigal); three lower channels run G to Sacral (Rhythm, The Beat, Discovery). */ channels: Array<{ /** * First gate of the Penta channel. */ gateA: number; /** * Second gate of the Penta channel. */ gateB: number; /** * Name of the Penta channel. One of The Alpha, Inspiration, The Prodigal, Rhythm, The Beat, Discovery. Always English, whatever the lang parameter says. Use nameLocalized for anything a reader sees. */ name: string; /** * Penta channel name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Circuit family of the channel. One of Individual, Collective, Tribal. Always English, whatever the lang parameter says. Use circuitLocalized for anything a reader sees. */ circuit: string; /** * Circuit family name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ circuitLocalized?: string; /** * Position of the channel in the Penta. upper channels run from the G Center to the Throat and carry the leadership and how-the-group-presents roles. lower channels run from the G Center to the Sacral and carry the managed, generative, resource roles. */ position: string; /** * Whether this is the 2/14 Channel of the Beat, the material core of the Penta vortex: gate 2 the direction for resources, gate 14 the resources themselves. */ isCore: boolean; /** * Whether the channel is a defined Strength: both of its gates are present somewhere in the group, so the function it governs has no gap. */ defined: boolean; /** * Zero-based indices of the members whose chart holds gate A, in member order. */ gateAHeldBy: Array; /** * Zero-based indices of the members whose chart holds gate B, in member order. */ gateBHeldBy: Array; }>; /** * The twelve Penta gates with their filled state and which members hold each. */ gates: Array<{ /** * Penta gate number. One of 1, 2, 5, 7, 8, 13, 14, 15, 29, 31, 33, 46. */ gate: number; /** * Human Design keynote name of the gate, describing the role it brings to the group. Always English, whatever the lang parameter says. Use gateNameLocalized for anything a reader sees. */ gateName: string; /** * Gate keynote name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ gateNameLocalized?: string; /** * Whether at least one member holds this gate. A gate held by nobody is a gap that conditions the group to compensate for the missing role. */ filled: boolean; /** * Zero-based indices of the members whose chart holds this gate. Empty when the gate is a gap. */ heldBy: Array; }>; /** * Group-level rollup of the Penta channels and gates. */ summary: { /** * Count of the six Penta channels that are defined Strengths in the group. */ definedChannels: number; /** * Count of the twelve Penta gates filled by at least one member. */ filledGates: number; /** * Penta gates held by no member. A non-empty list flags the functional gaps in the group. */ gapGates: Array; /** * Whether the 2/14 Channel of the Beat, the material core of the Penta, is defined across the group. */ coreDefined: boolean; }; }; }; export type CalculatePentaResponse = CalculatePentaResponses[keyof CalculatePentaResponses]; export type GenerateTransitData = { body?: { /** * Birth moment whose natal bodygraph the transit is overlaid on. */ birthData: { /** * Birth date in YYYY-MM-DD format. The anchor for both the Personality activations at birth and the Design activations 88 degrees of solar arc earlier. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters: the profile lines and gate boundaries shift with the exact minute of birth. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the bodygraph, which depends only on ecliptic longitudes. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the bodygraph. Defaults to 0. */ longitude?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node activations. True is what professional Human Design software uses (HumanDesign.ai, Total Human Design) and is the value RoxyAPI verifies against, so leave it unset for a standard chart. It matters only when a node sits on a gate boundary, where the choice can move a node gate and, rarely, change the completed channels and therefore the type, authority or definition. If another calculator shows a different type, it is almost certainly using the mean node: pass "mean" to match it. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; /** * Transit date in YYYY-MM-DD UTC. Optional. Defaults to today in UTC when omitted, giving the just-now transit. */ date?: string; /** * Transit time in HH:MM:SS UTC. Optional. Defaults to the current UTC time when omitted. Precision matters: the Moon moves through a gate in roughly half a day. */ time?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/human-design/transit'; }; export type GenerateTransitErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateTransitError = GenerateTransitErrors[keyof GenerateTransitErrors]; export type GenerateTransitResponses = { /** * Transit overlay with transiting activations, completed channels, temporary centers, and a summary */ 200: { /** * Date the transit overlay was computed for, in YYYY-MM-DD UTC. */ date: string; /** * Time the transit overlay was computed for, in HH:MM:SS UTC. */ time: string; /** * UTC offset of the transit moment. Always 0, since the transit is computed in UTC. */ timezone: number; /** * The 13 transiting bodies at this moment with the gate and line each currently activates. A transit is a single instant, so there is no Design side, only current positions. */ activations: Array<{ /** * Transiting body whose current position lands on this gate. One of Sun, Earth, Moon, North Node, South Node, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto. Always English, whatever the lang parameter says, so it stays safe to compare against in code and to key a glyph table on. Use bodyLocalized for anything a reader sees. */ body: string; /** * Transiting body name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ bodyLocalized?: string; /** * Human Design gate number from 1 to 64 this transiting body currently sits in. */ gate: number; /** * Line number from 1 to 6 within the gate, setting the line keynote of the transit. */ line: number; /** * Human Design keynote name of the gate the transiting body activates. Always English, whatever the lang parameter says. Use gateNameLocalized for anything a reader sees. */ gateName: string; /** * Gate keynote name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ gateNameLocalized?: string; /** * Cross-reference to the I-Ching hexagram that shares this gate number. */ ichingHexagram: { /** * I-Ching hexagram number, identical to the gate number it corresponds to. */ number: number; /** * English name of the corresponding I-Ching hexagram. */ english: string; }; }>; /** * Channels the transit temporarily completes that the natal chart did not already define, each labelled personal or educational with the side that supplied each gate. */ completedChannels: Array<{ /** * First gate of the completed channel. */ gateA: number; /** * Second gate of the completed channel. */ gateB: number; /** * Name of the channel the transit temporarily completes. Always English, whatever the lang parameter says. Use nameLocalized for anything a reader sees. */ name: string; /** * Channel name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Circuit family of the channel. One of Individual, Collective, Tribal. Always English, whatever the lang parameter says. Use circuitLocalized for anything a reader sees. */ circuit: string; /** * Circuit family name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ circuitLocalized?: string; /** * The two centers this channel connects and temporarily defines. */ centers: Array; /** * How the transit completes the channel. personal means the natal chart already holds one gate and the transit supplies the other, the classic electromagnetic completion. educational means both gates are open in the natal chart and the transit supplies both at once. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use kindLocalized for anything a reader sees. */ kind: string; /** * Completion kind name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ kindLocalized?: string; /** * Gate or gates of this channel the natal chart already holds. Empty for an educational channel. */ natalGates: Array; /** * Gate or gates of this channel supplied by the transit. One gate for a personal channel, both gates for an educational channel. */ transitGates: Array; }>; /** * Centers that are open in the natal chart and temporarily defined by a transit-completed channel. */ temporaryCenters: Array<{ /** * Center identifier. One of head, ajna, throat, g, heart, sacral, solar-plexus, spleen, root. */ id: string; /** * Display name of the center. Always English, whatever the lang parameter says. Use nameLocalized for anything a reader sees. */ name: string; /** * Center name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Always true. The center is open in the natal chart and temporarily defined by a transit-completed channel for the duration of the transit. */ temporarilyDefined: boolean; }>; /** * Short factual summary of the overlay with channel and center counts only. */ summary: string; }; }; export type GenerateTransitResponse = GenerateTransitResponses[keyof GenerateTransitResponses]; export type CalculateTypeData = { body?: { /** * Birth date in YYYY-MM-DD format. The anchor for both the Personality activations at birth and the Design activations 88 degrees of solar arc earlier. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters: the profile lines and gate boundaries shift with the exact minute of birth. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the bodygraph, which depends only on ecliptic longitudes. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the bodygraph. Defaults to 0. */ longitude?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node activations. True is what professional Human Design software uses (HumanDesign.ai, Total Human Design) and is the value RoxyAPI verifies against, so leave it unset for a standard chart. It matters only when a node sits on a gate boundary, where the choice can move a node gate and, rarely, change the completed channels and therefore the type, authority or definition. If another calculator shows a different type, it is almost certainly using the mean node: pass "mean" to match it. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/human-design/type'; }; export type CalculateTypeErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateTypeError = CalculateTypeErrors[keyof CalculateTypeErrors]; export type CalculateTypeResponses = { /** * Type, strategy, authority, signature, not-self theme, and profile */ 200: { /** * Human Design energy type. One of Manifestor, Generator, Manifesting Generator, Projector, Reflector. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use typeLocalized for anything a reader sees. */ type: string; /** * Energy type name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ typeLocalized?: string; /** * What the aura of this type does and how it is designed to engage life. The grounding text for the type label, so a consuming agent does not have to supply the meaning itself. */ typeDescription: string; /** * The aura mechanic of the type: how the energy field itself operates, for example open and enveloping, or closed and repelling. */ aura: string; /** * The aura strategy for engaging life correctly for this type. Always English, whatever the lang parameter says. Use strategyLocalized for anything a reader sees. */ strategy: string; /** * Strategy name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ strategyLocalized?: string; /** * How to actually apply the strategy. The strategy field alone is a bare label such as Respond or Inform; this is the operating instruction behind it. */ strategyDescription: string; /** * Inner authority for decision making. One of Emotional, Sacral, Splenic, Ego, Self-Projected, Mental, Lunar. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use authorityLocalized for anything a reader sees. */ authority: string; /** * Inner authority name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ authorityLocalized?: string; /** * How the decision is made, the timing it requires, and the characteristic trap. Inner authority is the most actionable output of a Human Design chart. */ authorityDescription: string; /** * The signature feeling of living in alignment. Always English, whatever the lang parameter says. Use signatureLocalized for anything a reader sees. */ signature: string; /** * Signature theme name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ signatureLocalized?: string; /** * The not-self theme that signals being out of alignment. Always English, whatever the lang parameter says. Use notSelfLocalized for anything a reader sees. */ notSelf: string; /** * Not-self theme name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ notSelfLocalized?: string; /** * Profile from the Personality Sun line over the Design Sun line. */ profile: string; }; }; export type CalculateTypeResponse = CalculateTypeResponses[keyof CalculateTypeResponses]; export type CalculateGatesData = { body?: { /** * Birth date in YYYY-MM-DD format. The anchor for both the Personality activations at birth and the Design activations 88 degrees of solar arc earlier. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters: the profile lines and gate boundaries shift with the exact minute of birth. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the bodygraph, which depends only on ecliptic longitudes. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the bodygraph. Defaults to 0. */ longitude?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node activations. True is what professional Human Design software uses (HumanDesign.ai, Total Human Design) and is the value RoxyAPI verifies against, so leave it unset for a standard chart. It matters only when a node sits on a gate boundary, where the choice can move a node gate and, rarely, change the completed channels and therefore the type, authority or definition. If another calculator shows a different type, it is almost certainly using the mean node: pass "mean" to match it. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/human-design/gates'; }; export type CalculateGatesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateGatesError = CalculateGatesErrors[keyof CalculateGatesErrors]; export type CalculateGatesResponses = { /** * Personality and Design activation lists, 13 each */ 200: { /** * The 13 conscious Personality activations computed at the exact birth moment, in black on a standard chart. */ personality: Array<{ /** * Activating body. One of Sun, Earth, Moon, North Node, South Node, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto. Always English, whatever the lang parameter says, so it stays safe to compare against in code and to key a glyph table on. Use planetLocalized for anything a reader sees. */ planet: string; /** * Activating body name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planetLocalized?: string; /** * Chart side. personality is the conscious birth-moment activation, design is the unconscious activation 88 degrees of solar arc before birth. */ side: string; /** * Human Design gate number from 1 to 64 that this activation falls in. */ gate: number; /** * Line number from 1 to 6 within the gate, setting the line keynote and the profile. */ line: number; /** * Human Design keynote name of the gate, describing its bodygraph function. Always English, whatever the lang parameter says. Use gateNameLocalized for anything a reader sees. */ gateName: string; /** * Gate keynote name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ gateNameLocalized?: string; /** * Bodygraph function of the gate: what it does in the center it sits in and the channel it forms. This is NOT the meaning of the I-Ching hexagram that shares its number. They share a number, not a definition. */ gateDescription: string; /** * Meaning of this gate at this specific line, one of 384. The finest interpretive layer in the chart and the one that makes a reading specific rather than generic. This is not the six abstract line archetypes: gate 41 line 3 carries its own meaning that neither the gate keynote nor the line-3 archetype holds alone. */ lineMeaning: string; /** * What this planetary activation contributes in Human Design specifically, which is not its meaning in western astrology. */ planetDescription: string; /** * Cross-reference to the I-Ching hexagram that shares this gate number. */ ichingHexagram: { /** * I-Ching hexagram number, identical to the gate number it corresponds to. */ number: number; /** * English name of the corresponding I-Ching hexagram. */ english: string; }; }>; /** * The 13 unconscious Design activations computed 88 degrees of solar arc before birth, in red on a standard chart. */ design: Array<{ /** * Activating body. One of Sun, Earth, Moon, North Node, South Node, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto. Always English, whatever the lang parameter says, so it stays safe to compare against in code and to key a glyph table on. Use planetLocalized for anything a reader sees. */ planet: string; /** * Activating body name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planetLocalized?: string; /** * Chart side. personality is the conscious birth-moment activation, design is the unconscious activation 88 degrees of solar arc before birth. */ side: string; /** * Human Design gate number from 1 to 64 that this activation falls in. */ gate: number; /** * Line number from 1 to 6 within the gate, setting the line keynote and the profile. */ line: number; /** * Human Design keynote name of the gate, describing its bodygraph function. Always English, whatever the lang parameter says. Use gateNameLocalized for anything a reader sees. */ gateName: string; /** * Gate keynote name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ gateNameLocalized?: string; /** * Bodygraph function of the gate: what it does in the center it sits in and the channel it forms. This is NOT the meaning of the I-Ching hexagram that shares its number. They share a number, not a definition. */ gateDescription: string; /** * Meaning of this gate at this specific line, one of 384. The finest interpretive layer in the chart and the one that makes a reading specific rather than generic. This is not the six abstract line archetypes: gate 41 line 3 carries its own meaning that neither the gate keynote nor the line-3 archetype holds alone. */ lineMeaning: string; /** * What this planetary activation contributes in Human Design specifically, which is not its meaning in western astrology. */ planetDescription: string; /** * Cross-reference to the I-Ching hexagram that shares this gate number. */ ichingHexagram: { /** * I-Ching hexagram number, identical to the gate number it corresponds to. */ number: number; /** * English name of the corresponding I-Ching hexagram. */ english: string; }; }>; }; }; export type CalculateGatesResponse = CalculateGatesResponses[keyof CalculateGatesResponses]; export type GetGateData = { body?: never; path: { /** * Gate number from 1 to 64. */ number: number | null; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/human-design/gates/{number}'; }; export type GetGateErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Gate number is outside the range 1 to 64 */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetGateError = GetGateErrors[keyof GetGateErrors]; export type GetGateResponses = { /** * Gate reference data with center, hexagram, and channel partners */ 200: { /** * Gate number from 1 to 64. */ number: number; /** * Human Design keynote name of the gate. Always English, whatever the lang parameter says. Use nameLocalized for anything a reader sees. */ name: string; /** * Gate keynote name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Center the gate sits in. */ center: string; /** * Display name of the center. Always English, whatever the lang parameter says. Use centerNameLocalized for anything a reader sees. */ centerName: string; /** * Center name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ centerNameLocalized?: string; /** * The I-Ching hexagram that shares this gate number. */ ichingHexagram: { /** * I-Ching hexagram number. */ number: number; /** * Hexagram name. */ english: string; }; /** * Gates that form a channel with this gate, with the channel name for each. */ channelPartners: Array<{ /** * Partner gate number. */ gate: number; /** * Name of the shared channel. Always English, whatever the lang parameter says. Use channelLocalized for anything a reader sees. */ channel: string; /** * Channel name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ channelLocalized?: string; }>; }; }; export type GetGateResponse = GetGateResponses[keyof GetGateResponses]; export type CalculateChannelsData = { body?: { /** * Birth date in YYYY-MM-DD format. The anchor for both the Personality activations at birth and the Design activations 88 degrees of solar arc earlier. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters: the profile lines and gate boundaries shift with the exact minute of birth. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the bodygraph, which depends only on ecliptic longitudes. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the bodygraph. Defaults to 0. */ longitude?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node activations. True is what professional Human Design software uses (HumanDesign.ai, Total Human Design) and is the value RoxyAPI verifies against, so leave it unset for a standard chart. It matters only when a node sits on a gate boundary, where the choice can move a node gate and, rarely, change the completed channels and therefore the type, authority or definition. If another calculator shows a different type, it is almost certainly using the mean node: pass "mean" to match it. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/human-design/channels'; }; export type CalculateChannelsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateChannelsError = CalculateChannelsErrors[keyof CalculateChannelsErrors]; export type CalculateChannelsResponses = { /** * Defined channels with circuits and the centers they define */ 200: { /** * The defined channels, where both gates are activated. */ channels: Array<{ /** * First gate of the channel. */ gateA: number; /** * Second gate of the channel. */ gateB: number; /** * Name of the defined channel. Always English, whatever the lang parameter says. Use nameLocalized for anything a reader sees. */ name: string; /** * Channel name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Circuit family of the channel. One of Individual, Collective, Tribal. Always English, whatever the lang parameter says. Use circuitLocalized for anything a reader sees. */ circuit: string; /** * Circuit family name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ circuitLocalized?: string; /** * The two centers this channel connects and defines. */ centers: Array; /** * What this channel wires between its two centers and the nature of the energy it carries. */ description: string; /** * What the circuit family of this channel governs. */ circuitDescription: string; }>; /** * Number of defined channels in the bodygraph. */ total: number; /** * The centers defined by these channels. */ definedCenters: Array; }; }; export type CalculateChannelsResponse = CalculateChannelsResponses[keyof CalculateChannelsResponses]; export type CalculateCentersData = { body?: { /** * Birth date in YYYY-MM-DD format. The anchor for both the Personality activations at birth and the Design activations 88 degrees of solar arc earlier. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters: the profile lines and gate boundaries shift with the exact minute of birth. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the bodygraph, which depends only on ecliptic longitudes. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the bodygraph. Defaults to 0. */ longitude?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node activations. True is what professional Human Design software uses (HumanDesign.ai, Total Human Design) and is the value RoxyAPI verifies against, so leave it unset for a standard chart. It matters only when a node sits on a gate boundary, where the choice can move a node gate and, rarely, change the completed channels and therefore the type, authority or definition. If another calculator shows a different type, it is almost certainly using the mean node: pass "mean" to match it. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/human-design/centers'; }; export type CalculateCentersErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateCentersError = CalculateCentersErrors[keyof CalculateCentersErrors]; export type CalculateCentersResponses = { /** * All nine centers with defined state, flags, theme, and active gates */ 200: { /** * All nine centers with their defined state and active gates. */ centers: Array<{ /** * Center identifier. One of head, ajna, throat, g, heart, sacral, solar-plexus, spleen, root. */ id: string; /** * Display name of the center. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use nameLocalized for anything a reader sees. */ name: string; /** * Center name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Whether the center is defined. A defined center is a consistent source of energy or awareness; an undefined center is open and conditioned by others. */ defined: boolean; /** * Whether this is a motor center (energy source). The four motors are Heart, Sacral, Solar Plexus, and Root. */ motor: boolean; /** * Whether this is an awareness center. The three awareness centers are Ajna, Solar Plexus, and Spleen. */ awareness: boolean; /** * Theme text describing the center in its current defined or undefined state. */ theme: string; /** * The conditioning trap of this center when it is open. Returned on every center so a consumer can surface it the moment `defined` is false, which is where the not-self operates. */ notSelfQuestion: string; /** * The gland, organ, or system this center corresponds to in the body. */ biology: string; /** * Active gate numbers that sit in this center. */ gates: Array; }>; /** * How many of the nine centers are defined. */ definedCount: number; }; }; export type CalculateCentersResponse = CalculateCentersResponses[keyof CalculateCentersResponses]; export type GetCenterData = { body?: never; path: { /** * Center id. One of head, ajna, throat, g, heart, sacral, solar-plexus, spleen, root. */ id: 'head' | 'ajna' | 'throat' | 'g' | 'heart' | 'sacral' | 'solar-plexus' | 'spleen' | 'root'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/human-design/centers/{id}'; }; export type GetCenterErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetCenterError = GetCenterErrors[keyof GetCenterErrors]; export type GetCenterResponses = { /** * Center reference data with defined and undefined meanings */ 200: { /** * Center identifier. */ id: string; /** * Display name of the center. Always English, whatever the lang parameter says. Use nameLocalized for anything a reader sees. */ name: string; /** * Center name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Whether this is a motor center. */ motor: boolean; /** * Whether this is an awareness center. */ awareness: boolean; /** * What this center means when defined: a consistent, reliable energy or awareness. */ definedMeaning: string; /** * What this center means when undefined and open: a place of conditioning and learning. */ undefinedMeaning: string; }; }; export type GetCenterResponse = GetCenterResponses[keyof GetCenterResponses]; export type CalculateProfileData = { body?: { /** * Birth date in YYYY-MM-DD format. The anchor for both the Personality activations at birth and the Design activations 88 degrees of solar arc earlier. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters: the profile lines and gate boundaries shift with the exact minute of birth. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the bodygraph, which depends only on ecliptic longitudes. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the bodygraph. Defaults to 0. */ longitude?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node activations. True is what professional Human Design software uses (HumanDesign.ai, Total Human Design) and is the value RoxyAPI verifies against, so leave it unset for a standard chart. It matters only when a node sits on a gate boundary, where the choice can move a node gate and, rarely, change the completed channels and therefore the type, authority or definition. If another calculator shows a different type, it is almost certainly using the mean node: pass "mean" to match it. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/human-design/profile'; }; export type CalculateProfileErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateProfileError = CalculateProfileErrors[keyof CalculateProfileErrors]; export type CalculateProfileResponses = { /** * Profile string, the two line numbers, and line keynotes */ 200: { /** * Profile in conscious/unconscious form, the Personality Sun line over the Design Sun line. */ profile: string; /** * Line number from 1 to 6 of the conscious Personality Sun. */ personalityLine: number; /** * Line number from 1 to 6 of the unconscious Design Sun. */ designLine: number; /** * Keynote of the Personality line, the conscious half of the profile. */ personalityKeynote: string; /** * Keynote of the Design line, the unconscious half of the profile. */ designKeynote: string; }; }; export type CalculateProfileResponse = CalculateProfileResponses[keyof CalculateProfileResponses]; export type CalculateVariablesData = { body?: { /** * Birth date in YYYY-MM-DD format. The anchor for both the Personality activations at birth and the Design activations 88 degrees of solar arc earlier. */ date: string; /** * Birth time in 24-hour HH:MM:SS format. Precision matters: the profile lines and gate boundaries shift with the exact minute of birth. */ time: string; /** * 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 DST-correct offset for the birth date, while a fixed offset or decimal is taken literally and will be wrong if it does not match the daylight-saving state on that date. Invalid timezones return 400 with a validation error. */ timezone: number | string; /** * Birth latitude in decimal degrees. Optional and does not affect the bodygraph, which depends only on ecliptic longitudes. Defaults to 0. */ latitude?: number; /** * Birth longitude in decimal degrees. Optional and does not affect the bodygraph. Defaults to 0. */ longitude?: number; /** * Lunar node convention. "mean" is the smoothed average node, which always moves retrograde; "true" is the osculating node, which tracks the real perturbed node, oscillates up to about 1.5 degrees either side of the mean on a 173-day cycle, and can briefly turn direct. Neither is more correct and they almost always fall in the same sign. Applies to the North and South Node activations. True is what professional Human Design software uses (HumanDesign.ai, Total Human Design) and is the value RoxyAPI verifies against, so leave it unset for a standard chart. It matters only when a node sits on a gate boundary, where the choice can move a node gate and, rarely, change the completed channels and therefore the type, authority or definition. If another calculator shows a different type, it is almost certainly using the mean node: pass "mean" to match it. Defaults to "true". */ nodeType?: 'mean' | 'true'; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/human-design/variables'; }; export type CalculateVariablesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateVariablesError = CalculateVariablesErrors[keyof CalculateVariablesErrors]; export type CalculateVariablesResponses = { /** * The four Variable arrows with substructure numbers, labels, and confidence flags */ 200: { /** * The four Variable arrows: Determination and Environment from the design side, Perspective and Motivation from the personality side. Together they form the Rave Variables / Primary Health System layer that sits beneath Type, Strategy, Authority, and Profile. */ arrows: Array<{ /** * Stable arrow identifier. One of determination, environment, perspective, motivation. */ key: string; /** * Arrow name. Determination is the top-left arrow governing the Primary Health System and digestion, Environment the bottom-left arrow, Perspective the bottom-right arrow also called View, and Motivation the top-right arrow. Always English, whatever the lang parameter says. Use nameLocalized for anything a reader sees. */ name: string; /** * Arrow name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ nameLocalized?: string; /** * Which half of the advanced layer the arrow belongs to. Primary Health System covers the body-side Determination and Environment arrows, Rave Psychology covers the mind-side Perspective and Motivation arrows. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use layerLocalized for anything a reader sees. */ layer: string; /** * Layer name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ layerLocalized?: string; /** * Position of the arrow at the head of the bodygraph. One of Top left, Bottom left, Top right, Bottom right. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use positionLocalized for anything a reader sees. */ position: string; /** * Arrow position name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ positionLocalized?: string; /** * The single activation, body and chart side, that this arrow is derived from. */ activation: { /** * Activating body whose substructure feeds this arrow. Determination and Motivation come from the Sun, Environment and Perspective from the North Node. Always English, whatever the lang parameter says, so it stays safe to compare against in code and to key a glyph table on. Use planetLocalized for anything a reader sees. */ planet: string; /** * Activating body name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ planetLocalized?: string; /** * Chart side of the activation. Determination and Environment come from the design side, Perspective and Motivation from the personality side. Always English, whatever the lang parameter says, so it stays safe to compare against in code. */ side: string; }; /** * Color number from 1 to 6, the substructure level one octave finer than the line. Color selects the arrow theme, for example the determination family or the motivation. */ color: number; /** * Tone number from 1 to 6, the substructure level beneath Color. Tone sets the arrow direction: tones 1 to 3 face left, tones 4 to 6 face right. */ tone: number; /** * Base number from 1 to 5, the finest published subdivision of the wheel. Returned for completeness but treated as informational, since it is finer than most birth times can resolve. */ base: number; /** * Arrow direction derived from the Tone. left for tones 1 to 3, right for tones 4 to 6. */ direction: string; /** * Name of the Color theme for this arrow, for example a determination family such as Touch, an environment such as Mountains, a perspective such as Personal, or a motivation such as Hope. Always English, whatever the lang parameter says. Use colorLabelLocalized for anything a reader sees. */ colorLabel: string; /** * Color theme name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ colorLabelLocalized?: string; /** * Keynote of the arrow direction for this arrow, for example Active or Passive for Determination, Focused or Peripheral for Perspective. Always English, whatever the lang parameter says. Use directionLabelLocalized for anything a reader sees. */ directionLabel: string; /** * Arrow direction keynote in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ directionLabelLocalized?: string; /** * What this arrow is and what it governs. */ description: string; /** * What the layer this arrow belongs to governs, the body side or the mind side. */ layerDescription: string; /** * Meaning of the Color for THIS arrow. The same Color number means something different under Determination than under Motivation, so this is the reading of colorLabel in context, not a generic gloss. */ colorMeaning: string; /** * Meaning of the Tone. The six Tones are shared across all four arrows: the arrow does not change the Tone, it changes what the Tone qualifies. */ toneMeaning: string; /** * Meaning of the left or right direction for THIS arrow, the reading of directionLabel. */ directionMeaning: string; /** * Name of the Base. Informational only: the Base is finer than any civil birth time can resolve. Always English, whatever the lang parameter says. Use baseNameLocalized for anything a reader sees. */ baseName: string; /** * Base name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ baseNameLocalized?: string; /** * Cognition, the strongest sense, read off the Determination Tone. Present on the determination arrow ONLY: no authority supports reading Cognition from the other three arrows, so it is omitted rather than invented. */ cognition?: { /** * Name of the Cognition, the strongest sense. One of six read off the Determination Tone: Smell, Taste, Outer Vision, Inner Vision, Feeling, Touch. Always English, whatever the lang parameter says, so it stays safe to compare against in code. Use labelLocalized for anything a reader sees. */ label: string; /** * Cognition name in the requested language, for display only. Present only when lang is set to a language other than English, since in English it would repeat its canonical partner field exactly. Never compare against this value, compare against the canonical field beside it. */ labelLocalized?: string; /** * How this Cognition discriminates what is correct for the body, and the conditions that sharpen it. Renderable as the Cognition paragraph of a Variables or Primary Health System report. */ description: string; }; /** * Whether this arrow is far enough from a Color or Tone boundary to be reliable. When false the activation sits on a knife edge where the Color label or the arrow direction could flip with a more precise birth time, and the arrow should not be presented as fact. */ confident: boolean; }>; /** * True only when all four arrows are confident. A single knife-edge arrow makes the whole configuration uncertain. */ confident: boolean; /** * Boundary margin in degrees of ecliptic longitude used for the per-arrow confidence flag, the solar arc over a few minutes of clock time. An activation within this distance of a Color or Tone boundary is flagged low-confidence. */ confidenceMarginDeg: number; /** * What the Base layer is. Returned once at the top level rather than repeated on every arrow, since the Base layer is the same concept for all four. No per-Base meaning is returned: every one in circulation traces back to a single origin, so it fails the two-source bar this package holds. */ baseDescription: string; }; }; export type CalculateVariablesResponse = CalculateVariablesResponses[keyof CalculateVariablesResponses]; export type CalculateLifePathData = { body?: { /** * Birth year between 100 and 2100. Supports historical figures like Einstein (1879) and Shakespeare (1564). */ year: number; /** * Birth month (1-12) */ month: number; /** * Birth day (1-31) */ day: number; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/life-path'; }; export type CalculateLifePathErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateLifePathError = CalculateLifePathErrors[keyof CalculateLifePathErrors]; export type CalculateLifePathResponses = { /** * Successfully calculated Life Path number with detailed interpretation */ 200: { /** * Your Life Path number, the single most important number in Pythagorean numerology. Values range from 1 to 9 for single digits, or 11, 22, 33 for Master Numbers. */ number: number; /** * Full step-by-step breakdown of the 3-Cycle Pythagorean reduction. Shows how month, day, and year each reduce independently before combining into the final Life Path number. */ calculation: string; /** * Whether this is a standard single-digit number (1 to 9) or a Master Number (11, 22, 33). Master Numbers carry amplified spiritual significance and are never reduced further. */ type: 'single' | 'master'; /** * Indicates whether a Karmic Debt number (13, 14, 16, or 19) appeared during the reduction chain. Karmic Debt reveals past-life challenges carried into this lifetime. */ hasKarmicDebt: boolean; /** * The specific Karmic Debt number detected during reduction, if any. Each debt number (13, 14, 16, 19) represents a distinct past-life lesson requiring resolution. */ karmicDebtNumber?: number; /** * Detailed interpretation of the Karmic Debt number when present. Only returned when hasKarmicDebt is true. */ karmicDebtMeaning?: { /** * Title describing the karmic debt theme and core past-life pattern. */ description: string; /** * The specific challenge or pattern from past lives that must be confronted. */ challenge: string; /** * Practical guidance for resolving the karmic debt and transforming the challenge into growth. */ resolution: string; }; meaning: { /** * Numerology archetype name for this Life Path number. Encapsulates the core identity and energy in a single phrase, such as "The Leader" for 1 or "The Master Builder" for 22. */ title: string; /** * Ten defining personality traits and energetic themes associated with this number. Useful for quick personality snapshots, tag clouds, and compatibility matching. */ keywords: Array; /** * In-depth 300 to 500 word interpretation covering personality, purpose, and life themes. Written by numerology experts with decades of practice. Suitable for full-page readings and detailed reports. */ description: string; /** * Core strengths and positive qualities. Each entry includes a trait name followed by a detailed explanation of how it manifests in daily life. */ strengths: Array; /** * Growth areas and shadow qualities to be aware of. Each entry names the challenge and explains its root cause and how to work through it constructively. */ challenges: Array; /** * Tailored career guidance covering ideal industries, roles, and work environments. Includes specific job titles and explains why certain professional paths align with this number. */ career: string; /** * Love, friendship, and family dynamics. Covers romantic compatibility with other Life Path numbers, communication style, and the key relationship lessons for this number. */ relationships: string; /** * Spiritual path, soul lessons, and recommended practices. Explores the deeper purpose behind this number and offers guidance for personal growth and inner alignment. */ spirituality: string; }; }; }; export type CalculateLifePathResponse = CalculateLifePathResponses[keyof CalculateLifePathResponses]; export type CalculateExpressionData = { body?: { /** * Full birth name (first, middle, last) */ fullName: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/expression'; }; export type CalculateExpressionErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateExpressionError = CalculateExpressionErrors[keyof CalculateExpressionErrors]; export type CalculateExpressionResponses = { /** * Successfully calculated Expression number with detailed interpretation */ 200: { /** * Expression number (also called Destiny number) derived from all letters in the full birth name. Reveals natural talents, abilities, and the goals you are meant to achieve. Values: 1 to 9, 11, 22, or 33. */ number: number; /** * Full Pythagorean letter-to-number conversion showing every letter value in the birth name, grouped by word, then summed and reduced to the final Expression number. */ calculation: string; /** * Single-digit (1 to 9) or Master Number (11, 22, 33). Master Numbers in the Expression position indicate extraordinary innate talent that demands conscious development. */ type: 'single' | 'master'; /** * Whether a Karmic Debt number (13, 14, 16, 19) appeared during the name reduction. Indicates inherited challenges embedded in your given name. */ hasKarmicDebt: boolean; /** * Specific Karmic Debt number found during reduction. Each debt (13, 14, 16, 19) points to a distinct lesson woven into the talents your name bestows. */ karmicDebtNumber?: number; /** * Detailed interpretation of the Karmic Debt number when present. Includes the debt theme, the inherited challenge, and guidance for resolution. Only returned when hasKarmicDebt is true. */ karmicDebtMeaning?: { /** * Title describing the karmic debt theme. Identifies the core past-life pattern that this debt number carries forward. */ description: string; /** * The specific challenge or pattern from past lives that must be confronted. Explains the root cause of recurring obstacles. */ challenge: string; /** * Practical guidance for resolving the karmic debt. Actionable steps for transforming the inherited challenge into growth. */ resolution: string; }; meaning: { /** * Numerology archetype for this Expression number. Captures the essence of your natural abilities, such as "The Communicator" for 3 or "The Master Intuitive" for 11. */ title: string; /** * Defining traits and talent themes for this Expression number. Ideal for personality profiles, compatibility engines, and talent-matching features. */ keywords: Array; /** * Expert-written 300 to 500 word interpretation of the natural abilities, life mission, and destiny encoded in your birth name. Covers how these talents manifest across life stages. */ description: string; /** * Natural talents and innate gifts. Each strength includes a detailed explanation of how it shows up in work, relationships, and personal growth. */ strengths: Array; /** * Shadow side of your talents and areas requiring conscious effort. Each challenge explains its root cause and practical strategies for transformation. */ challenges: Array; /** * Professional guidance aligned with your natural Expression talents. Covers ideal industries, specific roles, and the work environments where you will thrive. */ career: string; /** * How your Expression number shapes love, friendship, and family bonds. Includes compatibility insights with other numbers and communication patterns. */ relationships: string; /** * The spiritual dimension of your Expression energy. Explores soul lessons, recommended practices, and the deeper purpose your talents are meant to serve. */ spirituality: string; }; }; }; export type CalculateExpressionResponse = CalculateExpressionResponses[keyof CalculateExpressionResponses]; export type CalculateBridgeNumbersData = { body?: { /** * Full legal birth name as it appears on the birth certificate. Used to calculate Expression, Soul Urge, and Personality numbers. Include first, middle, and last names separated by spaces. */ fullName: string; /** * Birth year between 100 and 2100. Used to calculate the Life Path number via Pythagorean reduction. */ year: number; /** * Birth month (1 to 12) */ month: number; /** * Birth day (1 to 31) */ day: number; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/bridge'; }; export type CalculateBridgeNumbersErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateBridgeNumbersError = CalculateBridgeNumbersErrors[keyof CalculateBridgeNumbersErrors]; export type CalculateBridgeNumbersResponses = { /** * Successfully calculated three Bridge Numbers with actionable harmony guidance */ 200: { /** * Bridge between Life Path and Expression numbers. Reveals the gap between your destined life purpose (from birth date) and your natural talents and abilities (from birth name). A high bridge here means your innate skills may not directly serve your life mission without conscious effort. */ lifePathExpression: { /** * Bridge number (0 to 8). The absolute difference between two core numerology numbers after reducing master numbers to single digits. 0 means the two aspects are already in natural harmony. Higher values indicate greater tension requiring conscious adjustment. */ bridge: number; from: { /** * Name of the first core number in this bridge pair. Identifies which aspect of personality or destiny is being compared. */ name: string; /** * The reduced single-digit value (1 to 9) of the first core number used in the bridge calculation. */ number: number; }; to: { /** * Name of the second core number in this bridge pair. Identifies the other aspect of personality or destiny being compared. */ name: string; /** * The reduced single-digit value (1 to 9) of the second core number used in the bridge calculation. */ number: number; }; /** * Actionable guidance for bridging the gap between these two aspects of your numerology profile. Explains what adjustments to make to bring these energies into harmony. */ meaning: string; }; /** * Bridge between Expression and Personality numbers. Reveals the gap between your true talents (all letters) and how others perceive you (consonants only). A high bridge means others may not see your real capabilities, requiring you to present yourself more authentically. */ expressionPersonality: { /** * Bridge number (0 to 8). The absolute difference between two core numerology numbers after reducing master numbers to single digits. 0 means the two aspects are already in natural harmony. Higher values indicate greater tension requiring conscious adjustment. */ bridge: number; from: { /** * Name of the first core number in this bridge pair. Identifies which aspect of personality or destiny is being compared. */ name: string; /** * The reduced single-digit value (1 to 9) of the first core number used in the bridge calculation. */ number: number; }; to: { /** * Name of the second core number in this bridge pair. Identifies the other aspect of personality or destiny being compared. */ name: string; /** * The reduced single-digit value (1 to 9) of the second core number used in the bridge calculation. */ number: number; }; /** * Actionable guidance for bridging the gap between these two aspects of your numerology profile. Explains what adjustments to make to bring these energies into harmony. */ meaning: string; }; /** * Bridge between Expression and Soul Urge numbers. Reveals the gap between your outward talents (all letters) and your deepest inner desires (vowels only). A high bridge means what you are good at may differ from what your soul truly craves, calling for realignment. */ expressionSoulUrge: { /** * Bridge number (0 to 8). The absolute difference between two core numerology numbers after reducing master numbers to single digits. 0 means the two aspects are already in natural harmony. Higher values indicate greater tension requiring conscious adjustment. */ bridge: number; from: { /** * Name of the first core number in this bridge pair. Identifies which aspect of personality or destiny is being compared. */ name: string; /** * The reduced single-digit value (1 to 9) of the first core number used in the bridge calculation. */ number: number; }; to: { /** * Name of the second core number in this bridge pair. Identifies the other aspect of personality or destiny being compared. */ name: string; /** * The reduced single-digit value (1 to 9) of the second core number used in the bridge calculation. */ number: number; }; /** * Actionable guidance for bridging the gap between these two aspects of your numerology profile. Explains what adjustments to make to bring these energies into harmony. */ meaning: string; }; }; }; export type CalculateBridgeNumbersResponse = CalculateBridgeNumbersResponses[keyof CalculateBridgeNumbersResponses]; export type CalculateSoulUrgeData = { body?: { /** * Full birth name (vowels will be extracted) */ fullName: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/soul-urge'; }; export type CalculateSoulUrgeErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateSoulUrgeError = CalculateSoulUrgeErrors[keyof CalculateSoulUrgeErrors]; export type CalculateSoulUrgeResponses = { /** * Successfully calculated Soul Urge number with detailed interpretation */ 200: { /** * Your Soul Urge number (also called Heart Desire number), revealing your innermost motivations and what your soul truly craves. Values range from 1 to 9 for single digits, or 11, 22, 33 for Master Numbers. */ number: number; /** * Full step-by-step Pythagorean reduction using only the vowels (A, E, I, O, U) from the birth name. Shows each vowel mapped to its numeric value, grouped by word, then summed and reduced to the final Soul Urge number. */ calculation: string; /** * Whether this is a standard single-digit number (1 to 9) or a Master Number (11, 22, 33). Master Numbers in the Soul Urge position indicate a soul with amplified spiritual longing and heightened inner sensitivity. */ type: 'single' | 'master'; /** * Indicates whether a Karmic Debt number (13, 14, 16, or 19) appeared during the vowel reduction chain. Karmic Debt in the Soul Urge reveals past-life emotional patterns and unresolved inner desires carried into this lifetime. */ hasKarmicDebt: boolean; /** * The specific Karmic Debt number detected during the vowel reduction, if any. Each debt number (13, 14, 16, 19) represents a distinct past-life emotional lesson that influences your deepest desires and motivations. */ karmicDebtNumber?: number; /** * Detailed interpretation of the Karmic Debt number when present. Only returned when hasKarmicDebt is true. */ karmicDebtMeaning?: { /** * Title describing the karmic debt theme and core past-life pattern. */ description: string; /** * The specific challenge from past lives that must be confronted. */ challenge: string; /** * Practical guidance for resolving the karmic debt. */ resolution: string; }; meaning: { /** * Numerology archetype for this Soul Urge number. Reveals the deepest inner motivation, such as "The Seeker" for 7 or "The Master Teacher" for 33. */ title: string; /** * Core emotional drives and inner motivations for this Soul Urge. Useful for understanding hidden desires, emotional needs, and what truly fulfills someone at the deepest level. */ keywords: Array; /** * Expert-written 300 to 500 word exploration of the inner self, hidden desires, and emotional landscape. Reveals what the heart truly craves beneath the surface persona. */ description: string; /** * Emotional superpowers and inner gifts. Each strength describes how it shapes decision-making, relationships, and the pursuit of personal fulfillment. */ strengths: Array; /** * Inner shadows and emotional patterns to balance. Explains how each challenge manifests when the Soul Urge energy is overextended or repressed. */ challenges: Array; /** * Career paths that satisfy your deepest emotional needs. Focuses on work that feeds the soul rather than just the resume, aligned with inner fulfillment. */ career: string; /** * How your Soul Urge shapes what you need from love, friendship, and family. Covers emotional compatibility, attachment style, and the key to feeling truly seen. */ relationships: string; /** * The spiritual hunger at your core. Explores what your soul is seeking in this lifetime and the practices that bring you closest to inner peace and alignment. */ spirituality: string; }; }; }; export type CalculateSoulUrgeResponse = CalculateSoulUrgeResponses[keyof CalculateSoulUrgeResponses]; export type CalculatePersonalityData = { body?: { /** * Full birth name (consonants will be extracted) */ fullName: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/personality'; }; export type CalculatePersonalityErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculatePersonalityError = CalculatePersonalityErrors[keyof CalculatePersonalityErrors]; export type CalculatePersonalityResponses = { /** * Successfully calculated Personality number with detailed interpretation */ 200: { /** * Your Personality number, derived from the consonants in your birth name. Reveals how others perceive you, your outer persona, and the first impression you project. Values range from 1 to 9 for single digits, or 11, 22, 33 for Master Numbers. */ number: number; /** * Full step-by-step Pythagorean reduction using only the consonants from the birth name. Shows each consonant mapped to its numeric value, grouped by word, then summed and reduced to the final Personality number. */ calculation: string; /** * Whether this is a standard single-digit number (1 to 9) or a Master Number (11, 22, 33). Master Numbers in the Personality position indicate a powerful outer presence that others immediately sense, carrying heightened charisma and public influence. */ type: 'single' | 'master'; /** * Indicates whether a Karmic Debt number (13, 14, 16, or 19) appeared during the consonant reduction chain. Karmic Debt in the Personality position reveals past-life patterns that influence how others perceive you and the social challenges you must overcome. */ hasKarmicDebt: boolean; /** * The specific Karmic Debt number detected during the consonant reduction, if any. Each debt number (13, 14, 16, 19) represents a distinct past-life lesson that shapes your public image and social interactions. */ karmicDebtNumber?: number; /** * Detailed interpretation of the Karmic Debt number when present. Only returned when hasKarmicDebt is true. */ karmicDebtMeaning?: { /** * Title describing the karmic debt theme and core past-life pattern. */ description: string; /** * The specific challenge from past lives that must be confronted. */ challenge: string; /** * Practical guidance for resolving the karmic debt. */ resolution: string; }; meaning: { /** * Numerology archetype for this Personality number. Represents the outer mask you show the world, such as "The Builder" for 4 or "The Powerhouse" for 8. */ title: string; /** * Traits that define your public persona and first impression. These are the qualities others perceive before they get to know the real you. */ keywords: Array; /** * Expert-written 300 to 500 word analysis of the outer personality, social presence, and the image you project to the world. Reveals the gap between how others see you and who you truly are. */ description: string; /** * Your strongest social assets and public-facing gifts. These qualities shape how you are received in professional settings, social gatherings, and first meetings. */ strengths: Array; /** * Blind spots in your public persona. Patterns others notice that you may not, including defense mechanisms and image-management tendencies that can limit authentic connection. */ challenges: Array; /** * How your outward presence shapes professional opportunities. Covers the industries, roles, and environments where your public image creates the greatest advantage. */ career: string; /** * First impressions in love and social dynamics. Explores how your Personality number attracts certain partners, sets relationship expectations, and influences group dynamics. */ relationships: string; /** * The spiritual energy you radiate to others. Explores how your outer presence serves as a channel for deeper purpose, and what your public path reveals about your soul mission. */ spirituality: string; }; }; }; export type CalculatePersonalityResponse = CalculatePersonalityResponses[keyof CalculatePersonalityResponses]; export type CalculateBirthDayData = { body?: { /** * Day of birth (1-31) */ day: number; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/birth-day'; }; export type CalculateBirthDayErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateBirthDayError = CalculateBirthDayErrors[keyof CalculateBirthDayErrors]; export type CalculateBirthDayResponses = { /** * Successfully calculated Birth Day number with detailed interpretation */ 200: { /** * Your Birth Day number, revealing the special talents and innate abilities you carry from the day you were born. Values range from 1 to 9 for single digits, or 11, 22 for Master Numbers (days 11 and 22 are never reduced). */ number: number; /** * Step-by-step digit reduction of the birth day. Single-digit days (1 to 9) remain as-is, Master Number days (11, 22) are preserved, and all other double-digit days are reduced by summing their digits. */ calculation: string; /** * Whether this is a standard single-digit number (1 to 9) or a Master Number (11, 22). Master Numbers in the Birth Day position indicate extraordinary innate gifts that are available from birth and demand conscious development. */ type: 'single' | 'master'; /** * Indicates whether a Karmic Debt number (13, 14, 16, or 19) corresponds to the birth day. Karmic Debt in the Birth Day position reveals past-life challenges woven directly into your natural talents, influencing how your gifts manifest. */ hasKarmicDebt: boolean; /** * The specific Karmic Debt number detected from the birth day, if any. Each debt number (13, 14, 16, 19) represents a distinct past-life lesson embedded in the talents your birth day bestows. */ karmicDebtNumber?: number; /** * Detailed interpretation of the Karmic Debt number when present. Only returned when hasKarmicDebt is true. */ karmicDebtMeaning?: { /** * Title describing the karmic debt theme and core past-life pattern. */ description: string; /** * The specific challenge from past lives that must be confronted. */ challenge: string; /** * Practical guidance for resolving the karmic debt. */ resolution: string; }; meaning: { /** * Numerology archetype for this Birth Day number. Represents the specific talent or gift you brought into this life, like "The Nurturer" for 6 or "The Seeker" for 7. */ title: string; /** * Innate talents and natural aptitudes encoded in your birth day. These gifts are available from birth and become more refined with age. */ keywords: Array; /** * Expert-written 300 to 500 word reading of the special abilities your birth day bestows. Covers how these gifts complement your Life Path and Expression numbers. */ description: string; /** * Natural-born strengths that come effortlessly. These are the talents you can rely on even without formal training or conscious development. */ strengths: Array; /** * The flip side of your gifts. Each challenge explains how an overreliance on natural talent can become a liability without conscious balance. */ challenges: Array; /** * Professional paths where your birth day talents create an immediate advantage. Covers specific roles, industries, and work styles that align with your innate abilities. */ career: string; /** * How your birth day gifts shape the way you connect with others. Covers romantic chemistry, friendship dynamics, and the relationship patterns rooted in your natural temperament. */ relationships: string; /** * The spiritual dimension of your natural gifts. Explores how your birth day talents serve a higher purpose and the practices that help you channel them with intention. */ spirituality: string; }; }; }; export type CalculateBirthDayResponse = CalculateBirthDayResponses[keyof CalculateBirthDayResponses]; export type CalculateMaturityData = { body?: { /** * Your Life Path number (1-9, 11, 22, 33). Optional if year, month, day are provided. */ lifePath?: number; /** * Your Expression number (1-9, 11, 22, 33). Optional if fullName is provided. */ expression?: number; /** * Full birth name to calculate Expression number automatically. Use instead of passing expression directly. */ fullName?: string; /** * Birth year to calculate Life Path automatically. Use with month and day instead of passing lifePath directly. */ year?: number; /** * Birth month (1-12). Required with year and day for automatic Life Path calculation. */ month?: number; /** * Birth day (1-31). Required with year and month for automatic Life Path calculation. */ day?: number; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/maturity'; }; export type CalculateMaturityErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateMaturityError = CalculateMaturityErrors[keyof CalculateMaturityErrors]; export type CalculateMaturityResponses = { /** * Successfully calculated Maturity number with detailed interpretation */ 200: { /** * Your Maturity number (also called Realization number), revealing who you are becoming in the second half of life. Derived from the sum of your Life Path and Expression numbers. Values range from 1 to 9 for single digits, or 11, 22, 33 for Master Numbers. */ number: number; /** * Full step-by-step reduction showing Life Path plus Expression combined and reduced to the final Maturity number. This synthesis represents the convergence of your life purpose and natural talents into mature wisdom. */ calculation: string; /** * Whether this is a standard single-digit number (1 to 9) or a Master Number (11, 22, 33). Master Numbers in the Maturity position indicate a powerful late-life awakening with extraordinary potential for spiritual leadership and legacy. */ type: 'single' | 'master'; /** * Indicates whether a Karmic Debt number (13, 14, 16, or 19) appeared during the Life Path plus Expression reduction. Karmic Debt in the Maturity position reveals past-life lessons that surface during midlife transformation, typically after age 35 to 40. */ hasKarmicDebt: boolean; /** * The specific Karmic Debt number detected during the Maturity reduction, if any. Each debt number (13, 14, 16, 19) represents a distinct past-life challenge that becomes especially prominent as you enter the second half of life. */ karmicDebtNumber?: number; /** * Detailed interpretation of the Karmic Debt number when present. Only returned when hasKarmicDebt is true. */ karmicDebtMeaning?: { /** * Title describing the karmic debt theme and core past-life pattern. */ description: string; /** * The specific challenge from past lives that must be confronted. */ challenge: string; /** * Practical guidance for resolving the karmic debt. */ resolution: string; }; meaning: { /** * Numerology archetype for the Maturity number. Reveals who you are becoming in the second half of life, such as "The Builder" for 4 or "The Humanitarian" for 9. */ title: string; /** * Emerging traits and qualities that strengthen after age 35 to 40. These energies gradually integrate into your personality as you mature. */ keywords: Array; /** * Expert-written 300 to 500 word guide to the person you are evolving into. The Maturity number is the sum of Life Path and Expression, representing the wisdom gained through lived experience. */ description: string; /** * Late-blooming strengths that emerge with age and experience. These are the gifts that become your greatest assets in the second half of life. */ strengths: Array; /** * Growth areas to watch as Maturity energy intensifies. Understanding these early helps you navigate the transition with awareness and grace. */ challenges: Array; /** * Career evolution and professional reinvention for the second act. Covers industries, roles, and pursuits that align with your mature energy and accumulated wisdom. */ career: string; /** * How your relationships deepen and transform as Maturity energy takes hold. Covers evolving partnership needs, family dynamics, and the relationship wisdom that comes with age. */ relationships: string; /** * Spiritual awakening in the mature years. Explores the deeper meaning that emerges when life experience meets the Maturity number, and practices for this transformative phase. */ spirituality: string; }; }; }; export type CalculateMaturityResponse = CalculateMaturityResponses[keyof CalculateMaturityResponses]; export type AnalyzeKarmicLessonsData = { body?: { /** * Full birth name to analyze for missing numbers */ fullName: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/karmic-lessons'; }; export type AnalyzeKarmicLessonsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type AnalyzeKarmicLessonsError = AnalyzeKarmicLessonsErrors[keyof AnalyzeKarmicLessonsErrors]; export type AnalyzeKarmicLessonsResponses = { /** * Successfully analyzed karmic lessons with development guidance */ 200: { /** * Numbers missing from name (karmic lessons) */ missingNumbers: Array; lessons: Array<{ /** * Missing number */ number: number; /** * Core lesson summary */ lesson: string; /** * Detailed lesson explanation */ description: string; /** * Practical guidance for developing this quality */ howToOvercome: string; }>; /** * Count of each number present in name */ presentNumbers: { [key: string]: number; }; }; }; export type AnalyzeKarmicLessonsResponse = AnalyzeKarmicLessonsResponses[keyof AnalyzeKarmicLessonsResponses]; export type CheckKarmicDebtData = { body?: { /** * Birth year (checks Life Path) */ year?: number; /** * Birth month (checks Life Path) */ month?: number; /** * Birth day (checks Life Path) */ day?: number; /** * Full birth name (checks Expression, Soul Urge, Personality) */ fullName?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/karmic-debt'; }; export type CheckKarmicDebtErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CheckKarmicDebtError = CheckKarmicDebtErrors[keyof CheckKarmicDebtErrors]; export type CheckKarmicDebtResponses = { /** * Successfully detected karmic debt with detailed meanings */ 200: { /** * Whether any karmic debt numbers were detected */ hasKarmicDebt: boolean; /** * All karmic debt numbers found (13, 14, 16, 19) */ debtNumbers: Array; meanings: Array<{ /** * Karmic debt number */ number: number; /** * Debt title and nature */ description: string; /** * Detailed explanation of past life issue and current challenges */ challenge: string; /** * Guidance for resolving karmic debt in this lifetime */ resolution: string; }>; /** * Human-readable summary. Explains what the karmic debt findings mean or provides a positive affirmation when no debt is found. */ message: string; }; }; export type CheckKarmicDebtResponse = CheckKarmicDebtResponses[keyof CheckKarmicDebtResponses]; export type CalculatePersonalDayData = { body?: { /** * Birth month (1-12) */ month: number; /** * Birth day (1-31) */ day: number; /** * Target date in YYYY-MM-DD format. Defaults to today (UTC). */ targetDate?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/personal-day'; }; export type CalculatePersonalDayErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculatePersonalDayError = CalculatePersonalDayErrors[keyof CalculatePersonalDayErrors]; export type CalculatePersonalDayResponses = { /** * Successfully calculated Personal Day with forecast */ 200: { /** * Personal Day number (1-9). The most granular numerology cycle, revealing the energy and theme for this specific day based on your birth data. */ personalDay: number; /** * Central theme for this Personal Day. A concise label capturing the dominant energy of the day. */ theme: string; /** * Actionable daily guidance. Specific advice for how to work with the energy of this Personal Day. */ guidance: string; /** * The calendar date this forecast applies to in YYYY-MM-DD format. */ targetDate: string; /** * The parent Personal Month number this day falls within. */ personalMonth: number; /** * Theme of the parent Personal Month, providing broader context for the daily forecast. */ personalMonthTheme: string; /** * The parent Personal Year number this day falls within. */ personalYear: number; /** * Theme of the parent Personal Year, providing the broadest cycle context. */ personalYearTheme: string; }; }; export type CalculatePersonalDayResponse = CalculatePersonalDayResponses[keyof CalculatePersonalDayResponses]; export type CalculatePersonalMonthData = { body?: { /** * Birth month (1-12) */ month: number; /** * Birth day (1-31) */ day: number; /** * Target year for calculation (defaults to current year) */ year?: number; /** * Target calendar month to forecast (1-12, defaults to current month) */ targetMonth?: number; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/personal-month'; }; export type CalculatePersonalMonthErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculatePersonalMonthError = CalculatePersonalMonthErrors[keyof CalculatePersonalMonthErrors]; export type CalculatePersonalMonthResponses = { /** * Successfully calculated Personal Month with forecast */ 200: { /** * Personal Month number (1-9). Each month in the cycle carries specific energy and themes that guide decisions and focus. */ personalMonth: number; /** * Central theme for this Personal Month. A concise label capturing the dominant energy. */ theme: string; /** * Practical guidance for this month. Specific actions, areas of focus, and advice for making the most of this monthly energy. */ focus: string; /** * The calendar month this forecast applies to (1-12). */ calendarMonth: number; /** * The parent Personal Year number this month falls within. */ personalYear: number; /** * Theme of the parent Personal Year, providing broader context for the monthly forecast. */ personalYearTheme: string; }; }; export type CalculatePersonalMonthResponse = CalculatePersonalMonthResponses[keyof CalculatePersonalMonthResponses]; export type CalculatePersonalYearData = { body?: { /** * Birth month (1-12) */ month: number; /** * Birth day (1-31) */ day: number; /** * Year to calculate (defaults to current year) */ year?: number; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/personal-year'; }; export type CalculatePersonalYearErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculatePersonalYearError = CalculatePersonalYearErrors[keyof CalculatePersonalYearErrors]; export type CalculatePersonalYearResponses = { /** * Successfully calculated Personal Year with forecast */ 200: { /** * Personal Year number (1-9) */ personalYear: number; /** * Position in the 9-year cycle */ cycle: string; /** * Main theme of the year */ theme: string; /** * Detailed year forecast (200-300 words) */ forecast: string; /** * Key opportunities in this year */ opportunities: Array; /** * Challenges to navigate */ challenges: Array; /** * Practical guidance for navigating the year */ advice: string; }; }; export type CalculatePersonalYearResponse = CalculatePersonalYearResponses[keyof CalculatePersonalYearResponses]; export type CalculateNumCompatibilityData = { body?: { person1: { /** * Person 1 Life Path number (1-9, 11, 22, 33). Optional if year, month, day are provided. */ lifePath?: number; /** * Person 1 Expression number (1-9, 11, 22, 33). Optional if fullName is provided. */ expression?: number; /** * Person 1 Soul Urge number (1-9, 11, 22, 33). Optional if fullName is provided. */ soulUrge?: number; /** * Full birth name to calculate Expression and Soul Urge numbers automatically. Use instead of passing expression and soulUrge directly. */ fullName?: string; /** * Birth year to calculate Life Path automatically. Use with month and day instead of passing lifePath directly. */ year?: number; /** * Birth month (1-12). Required with year and day for automatic Life Path calculation. */ month?: number; /** * Birth day (1-31). Required with year and month for automatic Life Path calculation. */ day?: number; }; person2: { /** * Person 2 Life Path number (1-9, 11, 22, 33). Optional if year, month, day are provided. */ lifePath?: number; /** * Person 2 Expression number (1-9, 11, 22, 33). Optional if fullName is provided. */ expression?: number; /** * Person 2 Soul Urge number (1-9, 11, 22, 33). Optional if fullName is provided. */ soulUrge?: number; /** * Full birth name to calculate Expression and Soul Urge numbers automatically. Use instead of passing expression and soulUrge directly. */ fullName?: string; /** * Birth year to calculate Life Path automatically. Use with month and day instead of passing lifePath directly. */ year?: number; /** * Birth month (1-12). Required with year and day for automatic Life Path calculation. */ month?: number; /** * Birth day (1-31). Required with year and month for automatic Life Path calculation. */ day?: number; }; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/compatibility'; }; export type CalculateNumCompatibilityErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateNumCompatibilityError = CalculateNumCompatibilityErrors[keyof CalculateNumCompatibilityErrors]; export type CalculateNumCompatibilityResponses = { /** * Successfully calculated compatibility with detailed analysis */ 200: { /** * Overall compatibility score (0-100) */ overallScore: number; /** * Compatibility rating: Highly Compatible, Very Compatible, Compatible, Moderately Compatible, or Challenging. */ rating: string; lifePath: { /** * Person 1 Life Path number */ person1: number; /** * Person 2 Life Path number */ person2: number; /** * Life Path compatibility score (0-100) */ compatibility: number; /** * Detailed Life Path compatibility analysis */ description: string; }; expression: { /** * Person 1 Expression number */ person1: number; /** * Person 2 Expression number */ person2: number; /** * Expression compatibility score (0-100) */ compatibility: number; /** * Detailed Expression compatibility analysis */ description: string; }; soulUrge: { /** * Person 1 Soul Urge number */ person1: number; /** * Person 2 Soul Urge number */ person2: number; /** * Soul Urge compatibility score (0-100) */ compatibility: number; /** * Detailed Soul Urge compatibility analysis */ description: string; }; /** * Key relationship strengths */ strengths: Array; /** * Potential relationship challenges */ challenges: Array; /** * Practical relationship advice */ advice: string; }; }; export type CalculateNumCompatibilityResponse = CalculateNumCompatibilityResponses[keyof CalculateNumCompatibilityResponses]; export type GenerateNumerologyChartData = { body?: { /** * Full birth name as it appears on the birth certificate. Used for all letter-based Pythagorean numerology calculations including Expression, Soul Urge, Personality, and Karmic Lessons. */ fullName: string; /** * Birth year between 100 and 2100. Supports historical figures like Einstein (1879) and Shakespeare (1564). */ year: number; /** * Birth month (1-12) */ month: number; /** * Birth day (1-31) */ day: number; /** * Year for Personal Year calculation (defaults to current year) */ currentYear?: number; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/chart'; }; export type GenerateNumerologyChartErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GenerateNumerologyChartError = GenerateNumerologyChartErrors[keyof GenerateNumerologyChartErrors]; export type GenerateNumerologyChartResponses = { /** * Successfully generated complete numerology chart */ 200: { /** * Input profile data used to generate the chart. */ profile: { /** * Full birth name used for letter-based calculations (Expression, Soul Urge, Personality). */ name: string; /** * Birth date in YYYY-MM-DD format. */ birthdate: string; }; /** * Six core numerology numbers with full interpretations. The foundation of any complete numerology reading. */ coreNumbers: { /** * Life Path. The most significant core number, revealing life purpose and destiny path. */ lifePath: { /** * Life Path number (1-9, 11, 22, 33). The most important number in numerology, derived from birth date. Reveals life purpose and destiny. */ number: number; /** * Step-by-step calculation showing how the Life Path number was derived from the birth date. */ calculation: string; /** * Whether this is a single digit (1-9) or master number (11, 22, 33). Master numbers carry amplified spiritual significance. */ type: 'single' | 'master'; /** * True if the reduction passed through a karmic debt number (13, 14, 16, 19). */ hasKarmicDebt: boolean; /** * The karmic debt number encountered during reduction, if any. */ karmicDebtNumber?: number; /** * Complete interpretation of the Life Path number with archetype, traits, career guidance, relationship insights, and spiritual direction. */ meaning: { /** * Numerology archetype name for this Life Path number. A defining phrase that captures the core identity, such as "The Leader" for 1 or "The Humanitarian" for 9. */ title: string; /** * Defining personality traits and energetic themes for this Life Path. Useful for compatibility matching, personality snapshots, and building numerology profile summaries. */ keywords: Array; /** * Authoritative 300 to 500 word interpretation covering personality, life purpose, and core themes. Written by numerology experts and suitable for full-page readings or PDF report generation. */ description: string; /** * Core strengths and positive qualities. Each entry pairs a trait with a detailed explanation of how it manifests in everyday life and decision-making. */ strengths: Array; /** * Growth areas and shadow qualities to work through. Each entry explains the root cause, how it surfaces in behavior, and constructive strategies for personal development. */ challenges: Array; /** * Tailored career guidance covering ideal industries, roles, and work environments. Includes specific job titles and explains why certain professional paths resonate with this Life Path energy. */ career: string; /** * Love, friendship, and family dynamics shaped by this Life Path. Covers romantic compatibility with other numbers, communication style, and the key relationship lessons for lasting partnerships. */ relationships: string; /** * Spiritual path, soul lessons, and recommended practices. Explores the deeper purpose behind this Life Path number and guidance for personal growth and inner transformation. */ spirituality: string; }; }; /** * Expression (Destiny) number. Reveals natural talents, abilities, and life goals derived from the full birth name. */ expression: { /** * Expression (Destiny) number derived from full birth name using Pythagorean numerology. */ number: number; /** * Letter-to-number conversion showing how the Expression number was calculated. */ calculation: string; /** * Single digit or master number. */ type: 'single' | 'master'; /** * Whether karmic debt was encountered during calculation. */ hasKarmicDebt: boolean; /** * Karmic debt number if present. */ karmicDebtNumber?: number; /** * Complete interpretation of the Expression number with archetype, talents, career paths, relationship dynamics, and spiritual expression. */ meaning: { /** * Numerology archetype for this Expression number. Reveals the natural talent blueprint, such as "The Communicator" for 3 or "The Master Builder" for 22. */ title: string; /** * Natural talents and abilities encoded in the birth name. These define your innate skill set, creative potential, and the gifts available to you throughout life. */ keywords: Array; /** * Expert-written 300 to 500 word analysis of natural abilities, life goals, and the talents your birth name reveals. Suitable for detailed readings and personality assessments. */ description: string; /** * Natural-born talents and creative gifts. Each strength describes a specific ability that comes effortlessly and how it contributes to personal and professional success. */ strengths: Array; /** * Growth areas where natural talent can become a liability without conscious balance. Explains how each challenge manifests and practical ways to work through it. */ challenges: Array; /** * Career paths where your Expression number talents create the greatest professional advantage. Covers specific industries, creative pursuits, and work styles aligned with your name vibration. */ career: string; /** * How your Expression number shapes the way you communicate, connect, and express love. Covers partnership dynamics, social style, and the relationship patterns rooted in your name energy. */ relationships: string; /** * The spiritual dimension of your natural gifts. Explores how your Expression number talents serve a higher purpose and the creative practices that deepen self-expression. */ spirituality: string; }; }; /** * Soul Urge (Heart Desire) number. Reveals innermost desires, motivations, and what truly makes you happy. Calculated from vowels. */ soulUrge: { /** * Soul Urge (Heart Desire) number from vowels in birth name. */ number: number; /** * Vowel extraction and reduction calculation. */ calculation: string; /** * Single digit or master number. */ type: 'single' | 'master'; /** * Whether karmic debt was encountered. */ hasKarmicDebt: boolean; /** * Karmic debt number if present. */ karmicDebtNumber?: number; /** * Complete interpretation of the Soul Urge number with archetype, emotional drives, relationship needs, and spiritual direction. */ meaning: { /** * Numerology archetype for this Soul Urge number. Reveals the deepest inner motivation, such as "The Seeker" for 7 or "The Master Teacher" for 33. */ title: string; /** * Core emotional drives and inner motivations. These define what truly fulfills you at the deepest level, beyond surface-level desires and social expectations. */ keywords: Array; /** * Expert-written 300 to 500 word exploration of the inner self, hidden desires, and emotional landscape. Reveals what the heart truly craves beneath the surface persona. */ description: string; /** * Emotional superpowers and inner gifts. Each strength describes how it shapes decision-making, relationships, and the pursuit of personal fulfillment. */ strengths: Array; /** * Inner shadows and emotional patterns to balance. Explains how each challenge manifests when the Soul Urge energy is overextended or repressed. */ challenges: Array; /** * Career paths that satisfy your deepest emotional needs. Focuses on work that feeds the soul rather than just the resume, aligned with lasting inner fulfillment. */ career: string; /** * How your Soul Urge shapes what you need from love, friendship, and family. Covers emotional compatibility, attachment style, and the key to feeling truly seen and understood. */ relationships: string; /** * The spiritual hunger at your core. Explores what your soul is seeking in this lifetime and the contemplative practices that bring you closest to inner peace and alignment. */ spirituality: string; }; }; /** * Personality number. The outer you, how the world perceives you. Calculated from consonants in the birth name. */ personality: { /** * Personality number from consonants in birth name. */ number: number; /** * Consonant extraction and reduction calculation. */ calculation: string; /** * Single digit or master number. */ type: 'single' | 'master'; /** * Whether karmic debt was encountered. */ hasKarmicDebt: boolean; /** * Karmic debt number if present. */ karmicDebtNumber?: number; /** * Complete interpretation of the Personality number with archetype, social traits, professional image, and first-impression dynamics. */ meaning: { /** * Numerology archetype for this Personality number. Represents the outer mask you show the world, such as "The Builder" for 4 or "The Powerhouse" for 8. */ title: string; /** * Traits that define your public persona and first impression. These are the qualities others perceive before they get to know the real you. */ keywords: Array; /** * Expert-written 300 to 500 word analysis of the outer personality, social presence, and the image you project to the world. Reveals the gap between perception and inner truth. */ description: string; /** * Your strongest social assets and public-facing gifts. These qualities shape how you are received in professional settings, social gatherings, and first meetings. */ strengths: Array; /** * Blind spots in your public persona. Patterns others notice that you may not, including defense mechanisms and image-management tendencies that can limit authentic connection. */ challenges: Array; /** * How your outward presence shapes professional opportunities. Covers the industries, roles, and environments where your public image creates the greatest advantage. */ career: string; /** * First impressions in love and social dynamics. Explores how your Personality number attracts certain partners, sets relationship expectations, and influences group dynamics. */ relationships: string; /** * The spiritual energy you radiate to others. Explores how your outer presence serves as a channel for deeper purpose and what your public path reveals about your soul mission. */ spirituality: string; }; }; /** * Birth Day number. Reveals a special talent or gift based on the calendar day of birth. */ birthDay: { /** * Birth Day number (1-31). A special talent number based on the day of the month you were born. */ number: number; /** * Step-by-step calculation showing how the Birth Day number was reduced from the calendar day of birth. */ calculation: string; /** * Whether this is a single digit (1-9) or master number (11, 22). Birth days of 11 and 22 are preserved as master numbers. */ type: 'single' | 'master'; /** * True if the birth day is a karmic debt number (13, 14, 16, 19). */ hasKarmicDebt: boolean; /** * The karmic debt number if the birth day carries one (13, 14, 16, or 19). */ karmicDebtNumber?: number; /** * Complete interpretation of the Birth Day number with archetype, innate talents, career advantages, and relationship dynamics. */ meaning: { /** * Numerology archetype for this Birth Day number. Represents the specific talent or gift you brought into this life, like "The Nurturer" for 6 or "The Seeker" for 7. */ title: string; /** * Innate talents and natural aptitudes encoded in your birth day. These gifts are available from birth and become more refined with age and experience. */ keywords: Array; /** * Expert-written 300 to 500 word reading of the special abilities your birth day bestows. Covers how these gifts complement your Life Path and Expression numbers. */ description: string; /** * Natural-born strengths that come effortlessly. These are the talents you can rely on even without formal training or conscious development. */ strengths: Array; /** * The flip side of your gifts. Each challenge explains how an overreliance on natural talent can become a liability without conscious balance. */ challenges: Array; /** * Professional paths where your birth day talents create an immediate advantage. Covers specific roles, industries, and work styles aligned with your innate abilities. */ career: string; /** * How your birth day gifts shape the way you connect with others. Covers romantic chemistry, friendship dynamics, and the relationship patterns rooted in your natural temperament. */ relationships: string; /** * The spiritual dimension of your natural gifts. Explores how your birth day talents serve a higher purpose and the practices that help you channel them with intention. */ spirituality: string; }; }; /** * Maturity number. The person you are becoming. Sum of Life Path and Expression, activates around age 35-40. */ maturity: { /** * Maturity number (Life Path + Expression). Becomes active around age 35-40. */ number: number; /** * Shows Life Path + Expression reduction. */ calculation: string; /** * Single digit or master number. */ type: 'single' | 'master'; /** * Whether karmic debt was encountered. */ hasKarmicDebt: boolean; /** * Karmic debt number if present. */ karmicDebtNumber?: number; /** * Complete interpretation of the Maturity number with archetype, emerging traits, career evolution, and spiritual awakening. */ meaning: { /** * Numerology archetype for the Maturity number. Reveals who you are becoming in the second half of life, such as "The Builder" for 4 or "The Humanitarian" for 9. */ title: string; /** * Emerging traits and qualities that strengthen after age 35 to 40. These energies gradually integrate into your personality as you mature and gain life experience. */ keywords: Array; /** * Expert-written 300 to 500 word guide to the person you are evolving into. The Maturity number represents the wisdom gained through lived experience and reveals your ultimate destination. */ description: string; /** * Late-blooming strengths that emerge with age and experience. These are the gifts that become your greatest assets in the second half of life. */ strengths: Array; /** * Growth areas to watch as Maturity energy intensifies. Understanding these early helps you navigate the transition into your mature self with awareness and grace. */ challenges: Array; /** * Career evolution and professional reinvention for the second act. Covers industries, roles, and pursuits that align with your mature energy and accumulated wisdom. */ career: string; /** * How your relationships deepen and transform as Maturity energy takes hold. Covers evolving partnership needs, family dynamics, and the relationship wisdom that comes with age. */ relationships: string; /** * Spiritual awakening in the mature years. Explores the deeper meaning that emerges when life experience meets the Maturity number and practices for this transformative phase. */ spirituality: string; }; }; }; /** * Additional numerology insights: karmic analysis, yearly/monthly forecasts, pinnacles, challenges, hidden passion, subconscious self, and name letter analysis. */ additionalInsights: { /** * Karmic Lessons analysis. Identifies lessons the soul needs to learn based on missing numbers in the birth name. */ karmicLessons: { /** * Numbers (1-9) missing from the birth name. Each missing number represents a karmic lesson to learn in this lifetime. */ missingNumbers: Array; /** * Detailed karmic lessons for each missing number. */ lessons: Array<{ /** * The missing number representing this karmic lesson. */ number: number; /** * Karmic lesson title identifying the core quality or virtue this soul needs to develop in the current lifetime. */ lesson: string; /** * What this missing number means for personal growth. Explains the life patterns, recurring situations, and soul-level work required to integrate this energy. */ description: string; /** * Actionable guidance for mastering this karmic lesson. Includes specific behaviors, mindset shifts, and daily practices that build the missing quality over time. */ howToOvercome: string; }>; /** * Count of each number (1-9) present in the birth name. High counts indicate natural strengths. */ presentNumbers: { [key: string]: number; }; }; /** * Karmic Debt analysis. Identifies unresolved karma from past lives carried through specific numbers (13, 14, 16, 19). */ karmicDebt: { /** * True if any core number reduces through a karmic debt number (13, 14, 16, 19). */ hasKarmicDebt: boolean; /** * List of karmic debt numbers found (13=laziness, 14=abuse of freedom, 16=ego destruction, 19=selfishness). */ debtNumbers: Array; /** * Detailed meanings for each karmic debt number found. */ meanings: Array<{ /** * Karmic debt number (13, 14, 16, or 19). Each represents a specific pattern of unresolved karma from past lives that demands conscious attention. */ number: number; /** * What this karmic debt means for your current lifetime. Explains the past-life pattern, how it manifests today, and why certain struggles keep recurring. */ description: string; /** * The central life challenge this debt creates. Identifies the repeating obstacle pattern and the emotional or behavioral trap to watch for. */ challenge: string; /** * How to resolve and transcend this karmic debt. Provides the spiritual lesson, practical steps, and the transformative shift that breaks the cycle. */ resolution: string; }>; }; /** * Personal Year forecast with nested Personal Month. Yearly and monthly numerology cycles. */ personalYear: { /** * Personal Year number (1-9). Each year in the 9-year cycle has distinct themes and energies. */ personalYear: number; /** * Position in the 9-year numerology cycle (e.g., "Year 5 of 9"). Each position carries distinct energy that shapes the entire year. */ cycle: string; /** * Central theme and energy defining this Personal Year. Provides a one-line summary of the dominant vibration influencing all areas of life. */ theme: string; /** * Detailed yearly forecast covering what to expect across career, relationships, health, and personal development. Provides month-by-month energy shifts and key turning points. */ forecast: string; /** * Key opportunities available during this Personal Year. Each entry identifies a specific area of life where conditions are favorable for growth and forward momentum. */ opportunities: Array; /** * Potential challenges to navigate during this cycle. Each entry identifies a recurring theme or obstacle and how to work with the energy rather than against it. */ challenges: Array; /** * Strategic guidance for making the most of this Personal Year. Covers timing decisions, areas to focus on, and the mindset that aligns with the current numerological energy. */ advice: string; /** * Personal Month forecast nested within the Personal Year cycle. */ personalMonth: { /** * Personal Month number (1-9). */ personalMonth: number; /** * Central theme for this Personal Month. */ theme: string; /** * Practical focus and guidance for this month. */ focus: string; }; }; /** * Four Pinnacle numbers representing major life phases with age ranges and meanings. */ pinnacles: Array<{ /** * Pinnacle position (1-4). Four major life phases. */ position: number; /** * Pinnacle number (1-9, 11, 22, 33). Defines the theme of this life phase. */ number: number; /** * Age when this Pinnacle phase begins. */ startAge: number; /** * Age when this phase ends. Null for the 4th Pinnacle (lasts rest of life). */ endAge: number | null; /** * Meaning and interpretation for this Pinnacle number. */ meaning: { /** * Pinnacle phase title. */ title: string; /** * What this Pinnacle phase brings to your life. */ description: string; /** * Key opportunities during this phase. */ opportunities: Array; /** * Challenges to navigate during this phase. */ challenges: Array; }; }>; /** * Four Challenge numbers representing life obstacles aligned with Pinnacle timing. */ challenges: Array<{ /** * Challenge position (1-4). Four life obstacle periods. */ position: number; /** * Challenge number (0-8). Defines the obstacle of this period. */ number: number; /** * Age when this Challenge period begins. */ startAge: number; /** * Age when this period ends. Null for the 4th Challenge. */ endAge: number | null; /** * Meaning and resolution guidance for this Challenge number. */ meaning: { /** * Challenge title. */ title: string; /** * What this Challenge demands you overcome. */ description: string; /** * Core lesson to learn during this period. */ lesson: string; /** * Actionable guidance for working through this Challenge. */ howToOvercome: string; }; }>; /** * Hidden Passion number. The most frequent number in the name revealing an overwhelming drive or talent. */ hiddenPassion: { /** * Hidden Passion number (1-9). The most frequently occurring number in the birth name. */ number: number; /** * How many times this number appears in the name. */ count: number; /** * All numbers tied for highest frequency (usually one, sometimes multiple). */ allPassions: Array; /** * Archetype title for this Hidden Passion. */ title: string; /** * What this dominant number drive reveals about latent talents and obsessions. */ description: string; }; /** * Subconscious Self number. Reveals inner confidence and emergency response style. */ subconsciousSelf: { /** * Subconscious Self number (1-9). Count of unique numbers present in the name. */ number: number; /** * Which numbers (1-9) are present in the birth name. */ uniqueNumbers: Array; /** * Archetype title for this Subconscious Self level. */ title: string; /** * How you handle emergencies and unexpected challenges based on the breadth of numbers in your name. */ description: string; }; /** * Name letter analysis: Cornerstone, Capstone, and First Vowel. */ nameLetters: { /** * Cornerstone letter analysis. Reveals approach to new situations. */ cornerstone: { /** * First letter of the first name. */ letter: string; /** * Pythagorean number value of the Cornerstone letter. */ number: number; /** * How you approach new situations and initiate action. */ meaning: string; }; /** * Capstone letter analysis. Reveals completion and follow-through style. */ capstone: { /** * Last letter of the first name. */ letter: string; /** * Pythagorean number value of the Capstone letter. */ number: number; /** * How you complete tasks and handle endings. */ meaning: string; }; /** * First Vowel analysis. Reveals instinctive emotional reactions. */ firstVowel: { /** * First vowel in the full name (A, E, I, O, or U). */ letter: string; /** * Instinctive emotional response and inner reaction style. */ meaning: string; }; }; }; /** * Birth Day profile with day-specific meaning (1-31). Unlike the core Birth Day number, this provides unique interpretation per calendar day. */ birthDayProfile?: { /** * Calendar day of birth (1-31). */ day: number; /** * Single digit or master number this day reduces to. */ reducesTo: number; /** * Unique archetype title for this specific birth day. */ title: string; /** * Personality traits specific to this birth day. */ keywords: Array; /** * Detailed personality profile unique to this calendar day, not just the reduced digit. */ description: string; /** * Strengths specific to this birth day. */ strengths: Array; /** * Challenges specific to this birth day. */ challenges: Array; /** * Career guidance for this specific birth day. */ career: string; /** * Relationship dynamics for this birth day. */ relationships: string; }; /** * Maturity number activation status based on current age. */ maturityStatus: { /** * Whether the Maturity number is currently active (typically activates around age 35-40). */ isActive: boolean; /** * Current age calculated from the birth year. */ currentAge: number; /** * Age range when the Maturity number typically activates (35-40). */ activationRange: string; }; /** * Lucky associations based on Life Path number: colors, gemstones, day, element, planet, and compatibility. */ luckyAssociations?: { /** * Lucky colors associated with the Life Path number. */ colors: Array; /** * Lucky gemstones aligned to the ruling planet. */ gemstones: Array; /** * Lucky day of the week. */ day: string; /** * Classical element (Fire, Water, Earth, Air). */ element: string; /** * Ruling planet for this Life Path number. */ rulingPlanet: string; /** * Most compatible Life Path numbers. */ compatibleNumbers: Array; /** * Least compatible Life Path numbers. */ incompatibleNumbers: Array; }; /** * AI-ready holistic summary weaving all core numbers, karmic insights, and yearly forecast into a cohesive narrative. Ideal for generating personalized reports, chatbot responses, or one-page numerology overviews. */ summary: string; }; }; export type GenerateNumerologyChartResponse = GenerateNumerologyChartResponses[keyof GenerateNumerologyChartResponses]; export type GetNumberMeaningData = { body?: never; path: { /** * Numerology number (1-9, 11, 22, 33) */ number: string; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/meanings/{number}'; }; export type GetNumberMeaningErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Number meaning not found */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetNumberMeaningError = GetNumberMeaningErrors[keyof GetNumberMeaningErrors]; export type GetNumberMeaningResponses = { /** * Successfully retrieved number meaning */ 200: { /** * Requested number */ number: number; /** * Number type */ type: 'single' | 'master'; meaning: { /** * Numerology archetype name. A single phrase capturing the core identity of this number, such as "The Leader" for 1 or "The Master Builder" for 22. */ title: string; /** * Ten defining personality traits and energetic themes. Useful for personality snapshots, compatibility matching, and building numerology profile summaries. */ keywords: Array; /** * Authoritative 300 to 500 word interpretation covering personality, life purpose, and core themes. Written by numerology experts and suitable for full-page readings. */ description: string; /** * Core strengths and positive qualities. Each entry pairs a trait name with a detailed explanation of how it manifests in real life. */ strengths: Array; /** * Growth areas and shadow qualities. Each entry explains the root cause, how it surfaces, and constructive strategies for working through it. */ challenges: Array; /** * Tailored career guidance with specific job titles, industries, and work environments. Explains why certain professional paths resonate with this number. */ career: string; /** * Love, friendship, and family dynamics. Covers romantic compatibility with other numbers, communication style, and the key relationship lessons. */ relationships: string; /** * Spiritual path, soul lessons, and recommended practices. Explores the deeper purpose behind this number and guidance for personal growth. */ spirituality: string; }; }; }; export type GetNumberMeaningResponse = GetNumberMeaningResponses[keyof GetNumberMeaningResponses]; export type GetDailyNumberData = { body?: { /** * Optional seed for reproducible readings. Same seed + same date = same number every time. Pass any unique identifier (userId, email hash, session token). Omit for anonymous daily readings. */ seed?: string; /** * Date for the reading in YYYY-MM-DD format. Defaults to today (UTC). Useful for viewing past daily readings or pre-generating future ones. */ date?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/daily'; }; export type GetDailyNumberErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetDailyNumberError = GetDailyNumberErrors[keyof GetDailyNumberErrors]; export type GetDailyNumberResponses = { /** * Daily numerology number with full interpretation */ 200: { /** * Date this daily number is for (YYYY-MM-DD, UTC). */ date: string; /** * Computed seed used for this reading. Same seed always produces the same number. */ seed: string; /** * Daily numerology number (1-9, 11, 22, 33). Represents the dominant energy and theme for this day. */ number: number; /** * Whether this is a single-digit number (1-9) or a Master Number (11, 22, 33). Master Number days carry amplified spiritual significance. */ type: 'single' | 'master'; /** * Concise daily guidance message combining the number archetype with practical advice for the day. */ dailyMessage: string; meaning: { /** * Numerology archetype for this number. Captures the core energy of the day in a single phrase. */ title: string; /** * Defining traits and energetic themes active today. Useful for daily affirmations, journaling prompts, and focus areas. */ keywords: Array; /** * Expert-written 300 to 500 word interpretation of the daily energy. Covers personality resonance, life themes, and how this number influences the day. */ description: string; /** * Qualities that are amplified and accessible today. Lean into these for maximum alignment with the daily energy. */ strengths: Array; /** * Shadow patterns to watch for today. Awareness of these helps navigate the day with intention and balance. */ challenges: Array; /** * Professional guidance tuned to the daily energy. Suggests optimal work strategies, meeting approaches, and productivity focus areas. */ career: string; /** * Relationship dynamics influenced by the daily number. Covers communication style, social energy, and partnership awareness for the day. */ relationships: string; /** * Spiritual theme of the day. Suggests meditation focus, contemplative practices, and the deeper lesson available today. */ spirituality: string; }; }; }; export type GetDailyNumberResponse = GetDailyNumberResponses[keyof GetDailyNumberResponses]; export type CalculateChaldeanData = { body?: { /** * The name to analyze. Chaldean tradition uses the name a person is most known by, not necessarily the full legal birth name. */ name: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/chaldean'; }; export type CalculateChaldeanErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateChaldeanError = CalculateChaldeanErrors[keyof CalculateChaldeanErrors]; export type CalculateChaldeanResponses = { /** * Successfully calculated the Chaldean name reading */ 200: { /** * The name analyzed. */ name: string; /** * The Destiny or name number from all letters. The primary Chaldean number, revealing the overall direction encoded in the name. */ destiny: { /** * Raw sum of the Chaldean letter values before any reduction. */ total: number; /** * The interpretable compound number (10 to 52), the hidden influence behind the name, or null when the total resolves below 10. */ compound: number | null; /** * The single-digit root (1 to 9), the outward expression. Chaldean does not preserve master numbers. */ root: number; /** * Letter-by-letter Chaldean breakdown summed to the total, then to compound and root. */ calculation: string; /** * Cheiro compound-number interpretation when the aspect carries a compound layer. */ compoundMeaning: { /** * The compound number (10 to 52). */ number: number; /** * Classical symbolic title from Cheiro, or null when the number has no named symbol. */ name: string | null; /** * Overall tenor of the compound. "mixed" covers conditional numbers that are fortunate only alongside a favorable single number or in a specific domain. */ nature: 'fortunate' | 'unfortunate' | 'mixed'; /** * Cheiro interpretation of the hidden influence carried by this compound number. */ meaning: string; /** * For numbers 33 to 52, the lower compound in the same series whose meaning this number shares. */ sameAs?: number; } | null; }; /** * The Soul Urge number from the vowels, revealing inner desire. Root may be 0 when the name has no vowels. */ soulUrge: { /** * Raw sum of the Chaldean letter values before any reduction. */ total: number; /** * The interpretable compound number (10 to 52), the hidden influence behind the name, or null when the total resolves below 10. */ compound: number | null; /** * The single-digit root (1 to 9), the outward expression. Chaldean does not preserve master numbers. */ root: number; /** * Letter-by-letter Chaldean breakdown summed to the total, then to compound and root. */ calculation: string; /** * Cheiro compound-number interpretation when the aspect carries a compound layer. */ compoundMeaning: { /** * The compound number (10 to 52). */ number: number; /** * Classical symbolic title from Cheiro, or null when the number has no named symbol. */ name: string | null; /** * Overall tenor of the compound. "mixed" covers conditional numbers that are fortunate only alongside a favorable single number or in a specific domain. */ nature: 'fortunate' | 'unfortunate' | 'mixed'; /** * Cheiro interpretation of the hidden influence carried by this compound number. */ meaning: string; /** * For numbers 33 to 52, the lower compound in the same series whose meaning this number shares. */ sameAs?: number; } | null; }; /** * The Personality number from the consonants, revealing the outer impression. Root may be 0 when the name has no consonants. */ personality: { /** * Raw sum of the Chaldean letter values before any reduction. */ total: number; /** * The interpretable compound number (10 to 52), the hidden influence behind the name, or null when the total resolves below 10. */ compound: number | null; /** * The single-digit root (1 to 9), the outward expression. Chaldean does not preserve master numbers. */ root: number; /** * Letter-by-letter Chaldean breakdown summed to the total, then to compound and root. */ calculation: string; /** * Cheiro compound-number interpretation when the aspect carries a compound layer. */ compoundMeaning: { /** * The compound number (10 to 52). */ number: number; /** * Classical symbolic title from Cheiro, or null when the number has no named symbol. */ name: string | null; /** * Overall tenor of the compound. "mixed" covers conditional numbers that are fortunate only alongside a favorable single number or in a specific domain. */ nature: 'fortunate' | 'unfortunate' | 'mixed'; /** * Cheiro interpretation of the hidden influence carried by this compound number. */ meaning: string; /** * For numbers 33 to 52, the lower compound in the same series whose meaning this number shares. */ sameAs?: number; } | null; }; numberMeaning: { /** * The Destiny root (1 to 9). */ number: number; /** * Ruling planet. */ planet: string; /** * Archetype of the root number. */ title: string; /** * Core themes of the Destiny root. */ keywords: Array; /** * True for roots 4 and 8, the two numbers Cheiro counsels caution with. */ caution: boolean; /** * Planetary interpretation of the Destiny root number. */ meaning: string; }; /** * True when the Destiny root is 4 or 8, the karmic numbers Cheiro advises adjusting a name away from for material success. */ caution: boolean; /** * One-line plain-language summary of the Chaldean reading. */ summary: string; }; }; export type CalculateChaldeanResponse = CalculateChaldeanResponses[keyof CalculateChaldeanResponses]; export type GetCompoundNumberData = { body?: never; path: { /** * Compound number from 10 to 52. */ number: string; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/compound-number/{number}'; }; export type GetCompoundNumberErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetCompoundNumberError = GetCompoundNumberErrors[keyof GetCompoundNumberErrors]; export type GetCompoundNumberResponses = { /** * Successfully retrieved the compound number meaning */ 200: { /** * The compound number (10 to 52). */ number: number; /** * Classical symbolic title from Cheiro, or null when none is given. */ name: string | null; /** * Overall tenor of the number. "mixed" marks conditional numbers, fortunate only with a favorable single number or in one domain. */ nature: 'fortunate' | 'unfortunate' | 'mixed'; /** * Cheiro interpretation of the hidden influence carried by this compound number. */ meaning: string; /** * The single-digit root the compound reduces to (1 to 9). */ root: number; /** * For numbers 33 to 52, the lower compound in the same series whose meaning this number shares. */ sameAs?: number; }; }; export type GetCompoundNumberResponse = GetCompoundNumberResponses[keyof GetCompoundNumberResponses]; export type CalculateDualData = { body?: { /** * The name to analyze in both systems. */ name: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/dual'; }; export type CalculateDualErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateDualError = CalculateDualErrors[keyof CalculateDualErrors]; export type CalculateDualResponses = { /** * Successfully calculated the name in both numerology systems */ 200: { /** * The name analyzed. */ name: string; pythagorean: { /** * Pythagorean Expression number (1 to 9, 11, 22, 33). */ number: number; /** * Single digit or preserved master number. */ type: 'single' | 'master'; /** * Pythagorean letter breakdown and reduction. */ calculation: string; /** * Archetype of the number. */ title: string; /** * Core themes in the Pythagorean reading. */ keywords: Array; }; chaldean: { /** * Chaldean compound number (10 to 52), the hidden influence, or null. */ compound: number | null; /** * Chaldean root (1 to 9). */ root: number; /** * Raw Chaldean letter total. */ total: number; /** * Chaldean letter breakdown to compound and root. */ calculation: string; /** * Planetary ruler of the Chaldean root. */ planet: string; /** * Archetype of the Chaldean root. */ title: string; /** * True when the Chaldean root is 4 or 8, the numbers of caution. */ caution: boolean; /** * Cheiro compound interpretation when present. */ compoundMeaning: { /** * The compound number. */ number: number; /** * Symbolic title. */ name: string | null; /** * Tenor of the compound. */ nature: 'fortunate' | 'unfortunate' | 'mixed'; /** * Cheiro interpretation. */ meaning: string; /** * Series equivalent for 33 to 52. */ sameAs?: number; } | null; }; /** * True when both systems reduce to the same single-digit energy (Pythagorean number reduced to one digit equals the Chaldean root). Agreement is read as a name whose vibrations are in harmony. */ agreement: boolean; /** * Plain-language comparison of the two systems for this name. */ note: string; }; }; export type CalculateDualResponse = CalculateDualResponses[keyof CalculateDualResponses]; export type CalculateBusinessNameData = { body?: { /** * The business or brand name to evaluate. */ name: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/numerology/business-name'; }; export type CalculateBusinessNameErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateBusinessNameError = CalculateBusinessNameErrors[keyof CalculateBusinessNameErrors]; export type CalculateBusinessNameResponses = { /** * Successfully analyzed the business name */ 200: { /** * The business name analyzed. */ name: string; /** * Raw Chaldean letter total of the name. */ total: number; /** * Chaldean compound number (10 to 52), the hidden influence, or null. */ compound: number | null; /** * Single-digit business root (1 to 9), the outward commercial expression. */ root: number; /** * Planetary ruler of the business root. */ planet: string; /** * Overall favorability of the root for business. excellent and good are growth-friendly; caution (7, 8) and avoid (4) flag the demanding and unstable roots. */ rating: 'excellent' | 'good' | 'caution' | 'avoid'; /** * True when the compound number is one of Cheiro fortunate compounds, an extra positive signal layered over the root rating. */ favorableCompound: boolean; /** * Industries the business root favors. */ industries: Array; /** * Plain-language guidance for using this number as a brand. */ guidance: string; /** * Chaldean letter breakdown of the business name. */ calculation: string; /** * Cheiro compound interpretation when present. */ compoundMeaning: { /** * The compound number. */ number: number; /** * Symbolic title, if any. */ name: string | null; /** * Tenor of the compound. */ nature: 'fortunate' | 'unfortunate' | 'mixed'; /** * Cheiro interpretation. */ meaning: string; /** * Series equivalent for 33 to 52. */ sameAs?: number; } | null; /** * One-line plain-language verdict for the business name. */ summary: string; }; }; export type CalculateBusinessNameResponse = CalculateBusinessNameResponses[keyof CalculateBusinessNameResponses]; export type ListCardsData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Maximum items to return per page. Range: 1-100, default 20. */ limit?: number; /** * Number of items to skip for pagination. Default 0. */ offset?: number | null; /** * Filter by arcana type. Major arcana (0-21) represents life lessons and spiritual themes. Minor arcana (Ace-King in 4 suits) represents daily situations and practical matters. */ arcana?: 'major' | 'minor'; /** * Filter minor arcana by suit. Cups=emotions/relationships, Wands=creativity/passion, Swords=intellect/conflict, Pentacles=material/finances. Only applies to minor arcana cards. */ suit?: 'cups' | 'wands' | 'swords' | 'pentacles'; /** * Filter by card number. Major Arcana: 0 (The Fool) through 21 (The World). Minor Arcana: 1 (Ace) through 14 (King). Combine with arcana or suit filters for precise results. */ number?: number | null; }; url: '/tarot/cards'; }; export type ListCardsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListCardsError = ListCardsErrors[keyof ListCardsErrors]; export type ListCardsResponses = { /** * List of tarot cards with basic information. Use GET /cards/:id for full details. */ 200: { /** * Total number of tarot cards matching the applied filters. 78 for the full deck, 22 for Major Arcana, 56 for Minor Arcana, 14 per suit. */ total: number; /** * Maximum items returned per page. */ limit: number; /** * Number of items skipped from the start of the result set. */ offset: number; /** * Array of tarot cards with basic metadata. Use GET /cards/:id for full upright and reversed interpretations. */ cards: Array; }; }; export type ListCardsResponse = ListCardsResponses[keyof ListCardsResponses]; export type GetCardData = { body?: never; path: { /** * Card identifier. Major arcana: "fool", "magician", "death". Minor arcana: "ace-of-cups", "seven-of-wands", "queen-of-swords", "king-of-pentacles". Casing and separators are flexible, so "Fool" and "ACE_OF_CUPS" both resolve, and a leading definite article is optional, so "the-star" resolves to "star". The canonical form, and the one every response echoes, is kebab-case with no article. */ id: string; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/tarot/cards/{id}'; }; export type GetCardErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Card not found */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetCardError = GetCardErrors[keyof GetCardErrors]; export type GetCardResponses = { /** * Card details */ 200: Card; }; export type GetCardResponse = GetCardResponses[keyof GetCardResponses]; export type DrawCardsData = { body: { /** * Number of cards to draw (1-78). Common values: 1 for daily card, 3 for past-present-future, 5 for relationship spread, 10 for Celtic Cross. Drawing 78 returns the entire shuffled deck. */ count: number; /** * Optional seed for reproducible results. Same seed = same cards in same order. Use format like "userId-date" for daily consistency, or "readingId" for shareable readings. Omit for true randomness. */ seed?: string; /** * Whether cards can appear reversed (upside down). Reversed cards have different meanings. Set false for upright-only readings. Default: true (50% chance of reversal per card). */ allowReversals?: boolean; /** * Whether same card can be drawn multiple times. Set false for traditional deck behavior (each card drawn only once). Set true for statistical analysis or oracle-style readings. Default: false. */ allowDuplicates?: boolean; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/tarot/draw'; }; export type DrawCardsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type DrawCardsError = DrawCardsErrors[keyof DrawCardsErrors]; export type DrawCardsResponses = { /** * Drawn cards */ 200: { /** * Seed used for this reading, if one was provided. Same seed reproduces identical draw results for consistent tarot readings. */ seed?: string; /** * Array of drawn tarot cards in draw order, each with orientation, keywords, and full meaning for divination. */ cards: Array; }; }; export type DrawCardsResponse = DrawCardsResponses[keyof DrawCardsResponses]; export type GetDailyCardData = { body?: { /** * Optional seed for reproducible readings. Same seed + same date = same card every time. Pass any unique identifier (userId, email hash, session token). Omit for anonymous daily readings. */ seed?: string; /** * Date for the reading in YYYY-MM-DD format. Defaults to today (UTC). Useful for viewing past daily readings or pre-generating future ones. */ date?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/tarot/daily'; }; export type GetDailyCardErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Failed to draw card */ 500: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; }; export type GetDailyCardError = GetDailyCardErrors[keyof GetDailyCardErrors]; export type GetDailyCardResponses = { /** * Daily card reading */ 200: { /** * Date of the daily tarot reading in YYYY-MM-DD format (UTC). Determines which card is drawn for seeded readings. */ date: string; /** * Seed used for this daily reading. Same seed on the same date always produces the identical card for reproducible daily divination. */ seed: string; card: DrawnCard; /** * Concise daily tarot message summarizing the card, its orientation, key themes, and brief guidance for the day. */ dailyMessage: string; }; }; export type GetDailyCardResponse = GetDailyCardResponses[keyof GetDailyCardResponses]; export type CastYesNoData = { body: { /** * Your specific yes/no question. Be clear and focused. Good: "Should I move to a new city?" Bad: "What should I do about my life?" The more specific the question, the more useful the tarot guidance. */ question?: string; /** * Optional seed for reproducible results. Same seed + same question = same answer. Useful for testing, sharing readings, or ensuring consistency. Omit for random draws each time. */ seed?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/tarot/yes-no'; }; export type CastYesNoErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Failed to draw card */ 500: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; }; export type CastYesNoError = CastYesNoErrors[keyof CastYesNoErrors]; export type CastYesNoResponses = { /** * Yes/No answer with interpretation */ 200: { /** * The querent question that was asked, if one was provided. */ question?: string; /** * The seed used for this draw, echoed back when one was supplied. Present only if the request carried a seed. Makes a cached or forwarded response self describing, so a reading can be reproduced or shared without the original request beside it. */ seed?: string; /** * Tarot-derived answer. Yes = upright card supports a positive outcome. No = reversed card suggests obstacles. Maybe = inherently ambiguous card drawn (The Hanged Man, Wheel of Fortune, Temperance, Two of Swords, Four of Swords) signaling pause, reflection, or shifting circumstances. */ answer: 'Yes' | 'No' | 'Maybe'; /** * Confidence level of the answer. Strong = Major Arcana card drawn (powerful, definitive cosmic energy). Qualified = Minor Arcana card drawn (nuanced, situational guidance). */ strength: 'Strong' | 'Qualified'; card: { /** * Unique card identifier in kebab-case (e.g. the-fool, ace-of-cups). */ id: string; /** * Display name of the tarot card. */ name: string; /** * Whether this card belongs to the Major Arcana (22 trump cards, major life themes) or Minor Arcana (56 suit cards, daily situations). */ arcana: 'major' | 'minor'; /** * True if the card was drawn reversed (upside down). Reversed cards carry modified or blocked energy compared to upright position. */ reversed: boolean; /** * Key themes and concepts associated with this card in its current orientation (upright or reversed). */ keywords: Array; /** * URL to the tarot card artwork image. */ imageUrl: string; }; /** * Contextual narrative explaining why this card answers the question with this result. Connects card meaning, orientation, and arcana strength into actionable guidance. */ interpretation: string; }; }; export type CastYesNoResponse = CastYesNoResponses[keyof CastYesNoResponses]; export type CastThreeCardData = { body: { /** * Optional specific question to focus the reading. Examples: "What should I know about my relationship?", "How can I improve my finances?", "What is blocking my creative growth?" Leave empty for general guidance. */ question?: string; /** * Optional seed for reproducible results. Same seed = same 3 cards in same positions. Useful for sharing readings, testing, or ensuring users get consistent results. Omit for random draws. */ seed?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/tarot/spreads/three-card'; }; export type CastThreeCardErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CastThreeCardError = CastThreeCardErrors[keyof CastThreeCardErrors]; export type CastThreeCardResponses = { /** * Three-card spread reading */ 200: { /** * Name of the tarot spread used (e.g. Three-Card, Celtic Cross, Career, Love). */ spread: string; /** * The querent question, if one was provided. */ question?: string; /** * Seed used for this reading, if one was provided. Same seed reproduces identical results. */ seed?: string; /** * Array of spread positions, each containing a drawn card with position-specific tarot interpretation. */ positions: Array<{ /** * Position number in the spread layout (1-based). */ position: number; /** * Position name describing what this card reveals (e.g. Past, Present, Future, Challenge). */ name: string; /** * Position-specific interpretation of the drawn card, explaining how this card meaning applies to this particular spread position. */ interpretation: string; card: DrawnCard; }>; /** * Narrative summary that connects the cards drawn across the spread positions into one cohesive reading. */ summary?: string; }; }; export type CastThreeCardResponse = CastThreeCardResponses[keyof CastThreeCardResponses]; export type CastCelticCrossData = { body: { /** * Optional querent question to focus the Celtic Cross. It is echoed back on the reading and gives the ten positions their context. Omit for a general reading of the situation. */ question?: string; /** * Optional seed for reproducible results. The same seed always draws the same ten cards into the same Celtic Cross positions, which is what lets a reading be shared or re-rendered. Omit for a random draw. */ seed?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/tarot/spreads/celtic-cross'; }; export type CastCelticCrossErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CastCelticCrossError = CastCelticCrossErrors[keyof CastCelticCrossErrors]; export type CastCelticCrossResponses = { /** * Celtic Cross spread reading */ 200: { /** * Name of the tarot spread used (e.g. Three-Card, Celtic Cross, Career, Love). */ spread: string; /** * The querent question, if one was provided. */ question?: string; /** * Seed used for this reading, if one was provided. Same seed reproduces identical results. */ seed?: string; /** * Array of 10 spread positions forming the complete Celtic Cross layout, each with a drawn card and position-specific interpretation. */ positions: Array<{ /** * Position number in the spread layout (1-based). */ position: number; /** * Position name describing what this card reveals (e.g. Past, Present, Future, Challenge). */ name: string; /** * Position-specific interpretation of the drawn card, explaining how this card meaning applies to this particular spread position. */ interpretation: string; card: DrawnCard; }>; /** * Narrative summary that connects the cards drawn across the spread positions into one cohesive reading. */ summary?: string; }; }; export type CastCelticCrossResponse = CastCelticCrossResponses[keyof CastCelticCrossResponses]; export type CastLoveSpreadData = { body: { /** * Optional querent question to focus the love spread. It is echoed back on the reading and gives the five relationship positions their context. Omit for general relationship guidance. */ question?: string; /** * Optional seed for reproducible results. The same seed always draws the same five cards into the same love positions, which is what lets a reading be shared or re-rendered. Omit for a random draw. */ seed?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/tarot/spreads/love'; }; export type CastLoveSpreadErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CastLoveSpreadError = CastLoveSpreadErrors[keyof CastLoveSpreadErrors]; export type CastLoveSpreadResponses = { /** * Love spread reading */ 200: { /** * Name of the tarot spread used (e.g. Three-Card, Celtic Cross, Career, Love). */ spread: string; /** * The querent question, if one was provided. */ question?: string; /** * Seed used for this reading, if one was provided. Same seed reproduces identical results. */ seed?: string; /** * Array of 5 love spread positions exploring relationship dynamics, each with a drawn card and position-specific interpretation. */ positions: Array<{ /** * Position number in the spread layout (1-based). */ position: number; /** * Position name describing what this card reveals (e.g. Past, Present, Future, Challenge). */ name: string; /** * Position-specific interpretation of the drawn card, explaining how this card meaning applies to this particular spread position. */ interpretation: string; card: DrawnCard; }>; /** * Narrative summary that connects the cards drawn across the spread positions into one cohesive reading. */ summary?: string; }; }; export type CastLoveSpreadResponse = CastLoveSpreadResponses[keyof CastLoveSpreadResponses]; export type CastCareerSpreadData = { body: { /** * Optional querent question to focus the career spread. It is echoed back on the reading and gives the seven career positions their context. Omit for general work and vocation guidance. */ question?: string; /** * Optional seed for reproducible results. The same seed always draws the same seven cards into the same career positions, which is what lets a reading be shared or re-rendered. Omit for a random draw. */ seed?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/tarot/spreads/career'; }; export type CastCareerSpreadErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CastCareerSpreadError = CastCareerSpreadErrors[keyof CastCareerSpreadErrors]; export type CastCareerSpreadResponses = { /** * Career spread reading */ 200: { /** * Name of the tarot spread used (e.g. Three-Card, Celtic Cross, Career, Love). */ spread: string; /** * The querent question, if one was provided. */ question?: string; /** * Seed used for this reading, if one was provided. Same seed reproduces identical results. */ seed?: string; /** * Array of 7 career spread positions using SWOT framework, each with a drawn card and position-specific interpretation. */ positions: Array<{ /** * Position number in the spread layout (1-based). */ position: number; /** * Position name describing what this card reveals (e.g. Past, Present, Future, Challenge). */ name: string; /** * Position-specific interpretation of the drawn card, explaining how this card meaning applies to this particular spread position. */ interpretation: string; card: DrawnCard; }>; /** * Narrative summary that connects the cards drawn across the spread positions into one cohesive reading. */ summary?: string; }; }; export type CastCareerSpreadResponse = CastCareerSpreadResponses[keyof CastCareerSpreadResponses]; export type CastCustomSpreadData = { body: { /** * Optional name for your custom tarot spread layout. Used as the spread identifier in the response. */ spreadName?: string; /** * Array of 1-10 custom position definitions for your tarot spread. Each position gets one drawn card with a position-specific interpretation. */ positions: Array<{ /** * Name for this position in the spread (e.g. Core Issue, Hidden Factor, Best Action). Defines what aspect of the reading this card represents. */ name: string; /** * Description of what this position reveals in the reading. Guides the tarot interpretation for the card drawn in this slot. */ interpretation: string; }>; /** * Optional querent question to focus the custom tarot reading. Provides context for position-specific interpretations. */ question?: string; /** * Optional seed for reproducible results. Same seed with the same positions produces identical card draws for consistent divination. */ seed?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/tarot/spreads/custom'; }; export type CastCustomSpreadErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CastCustomSpreadError = CastCustomSpreadErrors[keyof CastCustomSpreadErrors]; export type CastCustomSpreadResponses = { /** * Custom spread reading */ 200: { /** * Name of the tarot spread used (e.g. Three-Card, Celtic Cross, Career, Love). */ spread: string; /** * The querent question, if one was provided. */ question?: string; /** * Seed used for this reading, if one was provided. Same seed reproduces identical results. */ seed?: string; /** * Array of custom spread positions matching your defined layout, each with a drawn card and position-specific interpretation. */ positions: Array<{ /** * Position number in the spread layout (1-based). */ position: number; /** * Position name describing what this card reveals (e.g. Past, Present, Future, Challenge). */ name: string; /** * Position-specific interpretation of the drawn card, explaining how this card meaning applies to this particular spread position. */ interpretation: string; card: DrawnCard; }>; }; }; export type CastCustomSpreadResponse = CastCustomSpreadResponses[keyof CastCustomSpreadResponses]; export type GetReadingData = { body?: { /** * Birth date of the person in YYYY-MM-DD format. This is the anchor for all biorhythm cycle calculations. */ birthDate: string; /** * Date to calculate the reading for in YYYY-MM-DD format. Defaults to today (UTC) if omitted. */ targetDate?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/biorhythm/reading'; }; export type GetReadingErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetReadingError = GetReadingErrors[keyof GetReadingErrors]; export type GetReadingResponses = { /** * Complete biorhythm reading with all 10 cycles, energy rating, interpretation, and critical alerts */ 200: { /** * Birth date used for this calculation (YYYY-MM-DD). */ birthDate: string; /** * Date this reading is for (YYYY-MM-DD). */ targetDate: string; /** * Total days alive from birth date to target date. This is the basis for all cycle calculations. */ daysSinceBirth: number; /** * All 10 biorhythm cycle readings. Keys: physical, emotional, intellectual, intuitive, aesthetic, awareness, spiritual, passion, mastery, wisdom. */ cycles: { [key: string]: { /** * Percentage position in the cycle from -100 (trough) to 100 (peak). 0 represents a critical zero crossing. */ value: number; /** * Raw sine wave value before percentage conversion, ranging from -1.0 to 1.0. */ rawValue: number; /** * Current phase of the cycle. One of: peak, high, rising, critical_ascending, critical_descending, falling, low, trough. Canonical English whatever the lang parameter says, so it stays safe to compare against in code; phaseLabel carries the reader-facing form and IS translated. */ phase: 'peak' | 'high' | 'rising' | 'critical_ascending' | 'critical_descending' | 'falling' | 'low' | 'trough'; /** * Human-readable phase name for display in UIs, dashboards, and reports. */ phaseLabel: string; /** * Current day position within the cycle (1-based). Ranges from 1 to the cycle period length. */ dayInCycle: number; /** * Number of days until the next peak (100%) in this cycle. */ daysUntilPeak: number; /** * Number of days until the next trough (-100%) in this cycle. */ daysUntilTrough: number; /** * Number of days until the next zero crossing in this cycle. */ daysUntilCritical: number; /** * Short-term direction of the cycle, which is its SLOPE rather than its band, so it moves independently of phase. One of: rising, falling, peaking, bottoming. Canonical English, like phase. */ trend: 'rising' | 'falling' | 'peaking' | 'bottoming'; /** * Editorial 2-3 sentence reading specific to this cycle at its current phase position. */ interpretation: string; }; }; /** * Overall energy score from 1 (deep recovery) to 10 (peak performance), derived from the three primary cycle positions. */ energyRating: number; /** * Summary phase across every cycle for the day. One of: high_energy, mixed, recovery, critical. */ overallPhase: 'high_energy' | 'mixed' | 'recovery' | 'critical'; /** * Editorial 3-5 sentence reading combining all cycle states into a coherent daily assessment. */ interpretation: string; /** * Actionable 1-2 sentence guidance for the day based on the combined cycle analysis. */ advice: string; /** * Critical day alerts. Present only when one or more primary cycles are at or near zero crossing. */ criticalAlerts: Array<{ /** * Which cycle is at or near zero crossing. */ cycle: 'physical' | 'emotional' | 'intellectual' | 'intuitive' | 'aesthetic' | 'awareness' | 'spiritual' | 'passion' | 'mastery' | 'wisdom'; /** * Alert type. One of: zero_crossing. Raised once for the whole critical band, when the cycle sits within 9 points of zero in either direction. */ type: 'zero_crossing'; /** * Whether the cycle is rising through zero (ascending) or falling through zero (descending). */ direction: 'ascending' | 'descending'; /** * Specific advisory text for this critical alert. */ advisory: string; }>; }; }; export type GetReadingResponse = GetReadingResponses[keyof GetReadingResponses]; export type GetForecastData = { body?: { /** * Birth date of the person in YYYY-MM-DD format. */ birthDate: string; /** * Start date of the forecast range in YYYY-MM-DD format. Defaults to today (UTC). */ startDate?: string; /** * End date of the forecast range in YYYY-MM-DD format. Defaults to startDate + 30 days. Maximum range: 90 days. */ endDate?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/biorhythm/forecast'; }; export type GetForecastErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetForecastError = GetForecastErrors[keyof GetForecastErrors]; export type GetForecastResponses = { /** * Biorhythm forecast with daily readings, summary, and best/worst day identification */ 200: { /** * Birth date used for this calculation. */ birthDate: string; /** * First day of the forecast range. */ startDate: string; /** * Last day of the forecast range. */ endDate: string; /** * Number of days in the forecast range. */ totalDays: number; summary: { /** * Date with the highest average primary cycle values in the range. Best day for demanding activities. */ bestDay: string; /** * Date with the lowest average primary cycle values in the range. Best scheduled as a rest day. */ worstDay: string; /** * Total number of days where at least one primary cycle crosses zero in the range. */ criticalDayCount: number; /** * Average energy rating (1-10) across the entire forecast period. */ averageEnergy: number; /** * Overview guidance for the entire forecast period based on average energy and cycle patterns. */ periodAdvice: string; }; /** * Array of daily readings, one per day in the forecast range. */ days: Array<{ /** * Date of this daily reading (YYYY-MM-DD). */ date: string; /** * Days from birth date to this date. */ daysSinceBirth: number; /** * Physical cycle value (-100 to 100). */ physical: number; /** * Emotional cycle value (-100 to 100). */ emotional: number; /** * Intellectual cycle value (-100 to 100). */ intellectual: number; /** * Intuitive cycle value (-100 to 100). */ intuitive: number; /** * Energy rating for this day (1-10). */ energyRating: number; /** * True if any primary cycle crosses zero on this day. */ isCritical: boolean; /** * Which primary cycles are critical on this day. Empty array if none. */ criticalCycles: Array; }>; }; }; export type GetForecastResponse = GetForecastResponses[keyof GetForecastResponses]; export type GetCriticalDaysData = { body?: { /** * Birth date of the person in YYYY-MM-DD format. */ birthDate: string; /** * Start date of the search range in YYYY-MM-DD format. Defaults to today (UTC). */ startDate?: string; /** * End date of the search range in YYYY-MM-DD format. Defaults to startDate + 90 days. Maximum range: 180 days. */ endDate?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/biorhythm/critical-days'; }; export type GetCriticalDaysErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetCriticalDaysError = GetCriticalDaysErrors[keyof GetCriticalDaysErrors]; export type GetCriticalDaysResponses = { /** * Critical days with zero crossing details, severity levels, and advisory text */ 200: { /** * Birth date used for this calculation. */ birthDate: string; /** * Start of the search range. */ startDate: string; /** * End of the search range. */ endDate: string; /** * Total count of critical day events in the range. A double critical day counts as two events. */ totalCriticalDays: number; /** * All critical day events in the range, sorted by date. */ criticalDays: Array<{ /** * Date of the zero crossing (YYYY-MM-DD). */ date: string; /** * Which primary cycle crosses zero on this date. One of: physical, emotional, intellectual. Only the three primary cycles are scanned; the secondary and composite cycles are not. */ cycle: 'physical' | 'emotional' | 'intellectual'; /** * Cycle period in days. */ period: number; /** * Whether the cycle is rising through zero (ascending) or falling through zero (descending). */ direction: 'ascending' | 'descending'; /** * How many primary cycles are critical on this date. One of: single, double, triple. */ severity: 'single' | 'double' | 'triple'; /** * Advisory text explaining the significance of this critical day and recommended precautions. */ advisory: string; }>; /** * Dates where 2 or more primary cycles cross zero simultaneously. These are particularly significant days requiring extra caution. */ doubleCriticalDays: Array; /** * Date where all 3 primary cycles cross zero simultaneously. Extremely rare event. Null if none found in range. */ tripleCriticalDay: string | null; }; }; export type GetCriticalDaysResponse = GetCriticalDaysResponses[keyof GetCriticalDaysResponses]; export type CalculateBioCompatibilityData = { body?: { person1: { /** * Birth date of person 1 in YYYY-MM-DD format. */ birthDate: string; }; person2: { /** * Birth date of person 2 in YYYY-MM-DD format. */ birthDate: string; }; /** * Date to evaluate compatibility on in YYYY-MM-DD format. Defaults to today (UTC). Compatibility varies by day since biorhythm cycles are continuous. */ targetDate?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/biorhythm/compatibility'; }; export type CalculateBioCompatibilityErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CalculateBioCompatibilityError = CalculateBioCompatibilityErrors[keyof CalculateBioCompatibilityErrors]; export type CalculateBioCompatibilityResponses = { /** * Biorhythm compatibility analysis with per-cycle alignment, overall score, and relationship guidance */ 200: { person1: { /** * Birth date of person 1. */ birthDate: string; }; person2: { /** * Birth date of person 2. */ birthDate: string; }; /** * Date this compatibility was calculated for. */ targetDate: string; /** * Overall compatibility score from 0 (fully opposed) to 100 (perfectly synchronized). */ overallScore: number; /** * Compatibility rating label. One of: Highly Aligned, Well Aligned, Moderately Aligned, Misaligned, Opposed. */ rating: string; /** * Per-cycle compatibility analysis for physical, emotional, and intellectual cycles. */ cycles: { [key: string]: { /** * Person 1 cycle value on the target date (-100 to 100). */ person1Value: number; /** * Person 2 cycle value on the target date (-100 to 100). */ person2Value: number; /** * Absolute difference between the two values (0-200). Lower values indicate better alignment. */ difference: number; /** * Alignment score from 0 (perfectly opposed) to 100 (perfectly in sync). */ alignment: number; /** * How the two people's cycles sit against each other. One of: in_sync, complementary, neutral, opposing. This is a PAIR alignment and shares no values with the single-person cycle phase. */ phase: 'in_sync' | 'complementary' | 'neutral' | 'opposing'; /** * Human-readable description of how this cycle alignment affects the relationship. */ description: string; }; }; /** * Relationship strengths based on the compatibility profile. */ strengths: Array; /** * Potential relationship challenges to be aware of. */ challenges: Array; /** * Practical relationship guidance based on the combined cycle analysis. */ advice: string; dailySync: { /** * Absolute difference in physical cycle values (0-200). Lower = more aligned. */ physicalDiff: number; /** * Absolute difference in emotional cycle values (0-200). Lower = more aligned. */ emotionalDiff: number; /** * Absolute difference in intellectual cycle values (0-200). Lower = more aligned. */ intellectualDiff: number; }; }; }; export type CalculateBioCompatibilityResponse = CalculateBioCompatibilityResponses[keyof CalculateBioCompatibilityResponses]; export type GetPhasesData = { body?: { /** * Birth date of the person in YYYY-MM-DD format. */ birthDate: string; /** * Date to get phase information for in YYYY-MM-DD format. Defaults to today (UTC). */ targetDate?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/biorhythm/phases'; }; export type GetPhasesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetPhasesError = GetPhasesErrors[keyof GetPhasesErrors]; export type GetPhasesResponses = { /** * Phase information for all 10 cycles with summary */ 200: { /** * Birth date used for this calculation. */ birthDate: string; /** * Date this phase info is for. */ targetDate: string; /** * Total days alive from birth date to target date. */ daysSinceBirth: number; /** * Phase information for all 10 cycles keyed by cycle ID. */ phases: { [key: string]: { /** * Cycle value from -100 to 100. */ value: number; /** * Current phase identifier. */ phase: 'peak' | 'high' | 'rising' | 'critical_ascending' | 'critical_descending' | 'falling' | 'low' | 'trough'; /** * Human-readable phase label. */ phaseLabel: string; /** * Current day position within the cycle. */ dayInCycle: number; /** * Cycle period in days. 0 for composite cycles (passion, mastery, wisdom). */ totalDays: number; /** * Days until next zero crossing. */ daysUntilCritical: number; /** * Short-term direction: rising, falling, peaking, or bottoming. */ trend: 'rising' | 'falling' | 'peaking' | 'bottoming'; }; }; /** * Quick overview string summarizing the current state of all cycles. */ summary: string; }; }; export type GetPhasesResponse = GetPhasesResponses[keyof GetPhasesResponses]; export type GetDailyBiorhythmData = { body?: { /** * Optional seed for reproducible readings. Same seed + same date = same reading every time. Pass any unique identifier (userId, email hash, session token). Omit for anonymous daily readings. */ seed?: string; /** * Date for the reading in YYYY-MM-DD format. Defaults to today (UTC). Useful for viewing past daily readings or pre-generating future ones. */ date?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/biorhythm/daily'; }; export type GetDailyBiorhythmErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetDailyBiorhythmError = GetDailyBiorhythmErrors[keyof GetDailyBiorhythmErrors]; export type GetDailyBiorhythmResponses = { /** * Daily biorhythm reading with spotlight cycle and actionable guidance */ 200: { /** * Date this daily reading is for (YYYY-MM-DD, UTC). */ date: string; /** * Computed seed used for this reading. Same seed always produces the same reading. */ seed: string; /** * Overall energy score from 1 to 10. */ energyRating: number; /** * Summary phase across every cycle for the day. One of: high_energy, mixed, recovery, critical. */ overallPhase: 'high_energy' | 'mixed' | 'recovery' | 'critical'; spotlight: { /** * Which primary cycle is featured as the daily spotlight. One of: physical, emotional, intellectual. */ cycle: 'physical' | 'emotional' | 'intellectual'; /** * Current value of the spotlight cycle (-100 to 100). */ value: number; /** * Current phase of the spotlight cycle. */ phase: 'peak' | 'high' | 'rising' | 'critical_ascending' | 'critical_descending' | 'falling' | 'low' | 'trough'; /** * Personalized message about the spotlight cycle and what it means for today. */ message: string; }; quickRead: { /** * Physical cycle value (-100 to 100). */ physical: number; /** * Emotional cycle value (-100 to 100). */ emotional: number; /** * Intellectual cycle value (-100 to 100). */ intellectual: number; }; /** * Concise daily biorhythm message combining energy rating and spotlight cycle. */ dailyMessage: string; /** * Actionable 1-2 sentence guidance for the day. */ advice: string; }; }; export type GetDailyBiorhythmResponse = GetDailyBiorhythmResponses[keyof GetDailyBiorhythmResponses]; export type GetDailyHexagramData = { body?: { /** * Optional seed for reproducible readings. Same seed + same date = same hexagram every time. Pass any unique identifier (userId, email hash, session token). Omit for anonymous daily readings. */ seed?: string; /** * Date for the reading in YYYY-MM-DD format. Defaults to today (UTC). Useful for viewing past daily readings or pre-generating future ones. */ date?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/iching/daily'; }; export type GetDailyHexagramErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Failed to generate daily hexagram */ 500: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; }; export type GetDailyHexagramError = GetDailyHexagramErrors[keyof GetDailyHexagramErrors]; export type GetDailyHexagramResponses = { /** * Daily hexagram reading with full interpretation */ 200: { /** * Date this daily hexagram is for (YYYY-MM-DD, UTC). */ date: string; /** * Computed seed used for this reading. Same seed always produces the same hexagram. */ seed: string; hexagram: { /** * Hexagram number in King Wen sequence (1-64). */ number: number; /** * Unicode hexagram symbol for display. */ symbol: string; /** * Original Chinese name. */ chinese: string; /** * English translation of the hexagram name. */ english: string; /** * Pinyin romanization with tone marks. */ pinyin: string; /** * Upper trigram (lines 4-6). */ upperTrigram: string; /** * Lower trigram (lines 1-3). */ lowerTrigram: string; /** * The Judgment (Tuan) text, the primary oracle statement of the hexagram offering core guidance. */ judgment: string; /** * The Image (Xiang) text, symbolic guidance derived from the trigram combination describing the ideal action. */ image: string; /** * Modern interpretations across life areas based on ancient I-Ching wisdom. */ interpretation: { /** * General life situation interpretation. */ general: string; /** * Love and relationship guidance. */ love: string; /** * Career and professional interpretation. */ career: string; /** * Decision-making guidance for whether to act, wait, or change course. */ decision: string; /** * Practical wisdom and actionable advice. */ advice: string; }; }; /** * Concise daily message summarizing the hexagram guidance */ dailyMessage: string; }; }; export type GetDailyHexagramResponse = GetDailyHexagramResponses[keyof GetDailyHexagramResponses]; export type CastDailyReadingData = { body?: { /** * Optional seed for reproducible readings. Same seed + same date = same hexagram every time. Pass any unique identifier (userId, email hash, session token). Omit for anonymous daily readings. */ seed?: string; /** * Date for the reading in YYYY-MM-DD format. Defaults to today (UTC). Useful for viewing past daily readings or pre-generating future ones. */ date?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/iching/daily/cast'; }; export type CastDailyReadingErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CastDailyReadingError = CastDailyReadingErrors[keyof CastDailyReadingErrors]; export type CastDailyReadingResponses = { /** * Complete daily casting with primary and resulting hexagrams */ 200: { /** * Date this daily casting is for (YYYY-MM-DD, UTC). */ date: string; /** * Computed seed for reproducible castings. */ seed: string; hexagram?: { /** * Hexagram number in King Wen sequence (1-64). */ number: number; /** * Unicode hexagram symbol for display. */ symbol: string; /** * Original Chinese name. */ chinese: string; /** * English translation of the hexagram name. */ english: string; /** * Pinyin romanization with tone marks. */ pinyin: string; /** * Upper trigram (lines 4-6). */ upperTrigram: string; /** * Lower trigram (lines 1-3). */ lowerTrigram: string; /** * The Judgment (Tuan) text, the primary oracle statement of the hexagram offering core guidance. */ judgment: string; /** * The Image (Xiang) text, symbolic guidance derived from the trigram combination describing the ideal action. */ image: string; /** * Modern interpretations across life areas based on ancient I-Ching wisdom. */ interpretation: { /** * General life situation interpretation. */ general: string; /** * Love and relationship guidance. */ love: string; /** * Career and professional interpretation. */ career: string; /** * Decision-making guidance for whether to act, wait, or change course. */ decision: string; /** * Practical wisdom and actionable advice. */ advice: string; }; }; /** * Line values (6-9) from bottom to top. 6=old yin (changing), 7=young yang, 8=young yin, 9=old yang (changing). */ lines: Array; /** * Positions of changing lines (1-6, bottom to top). These lines transform yin to yang or vice versa. */ changingLinePositions: Array; /** * The oracle statement and meaning of each line that came up CHANGING, and only those. The changing lines are what the cast is actually about, so this saves a second call to read them and stops a consuming agent from having to invent them. */ changingLines?: Array; /** * Hexagram after transformation (if changing lines present) */ resultingHexagram?: { /** * Hexagram number in King Wen sequence (1-64). */ number: number; /** * Unicode hexagram symbol for display. */ symbol: string; /** * Original Chinese name. */ chinese: string; /** * English translation of the hexagram name. */ english: string; /** * Pinyin romanization with tone marks. */ pinyin: string; /** * Upper trigram (lines 4-6). */ upperTrigram: string; /** * Lower trigram (lines 1-3). */ lowerTrigram: string; /** * The Judgment (Tuan) text, the primary oracle statement of the hexagram offering core guidance. */ judgment: string; /** * The Image (Xiang) text, symbolic guidance derived from the trigram combination describing the ideal action. */ image: string; /** * Modern interpretations across life areas based on ancient I-Ching wisdom. */ interpretation: { /** * General life situation interpretation. */ general: string; /** * Love and relationship guidance. */ love: string; /** * Career and professional interpretation. */ career: string; /** * Decision-making guidance for whether to act, wait, or change course. */ decision: string; /** * Practical wisdom and actionable advice. */ advice: string; }; }; }; }; export type CastDailyReadingResponse = CastDailyReadingResponses[keyof CastDailyReadingResponses]; export type ListHexagramsData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Maximum items to return per page. Range: 1-64, default 20. */ limit?: number; /** * Number of items to skip for pagination. Default 0. */ offset?: number | null; }; url: '/iching/hexagrams'; }; export type ListHexagramsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListHexagramsError = ListHexagramsErrors[keyof ListHexagramsErrors]; export type ListHexagramsResponses = { /** * List of hexagrams with basic information. */ 200: { /** * Total number of I-Ching hexagrams (always 64). */ total: number; /** * Page size used for this response. */ limit: number; /** * Number of hexagrams skipped. Use with limit for pagination. */ offset: number; /** * Hexagrams for the current page. Use /hexagrams/{number} for full details. */ hexagrams: Array; }; }; export type ListHexagramsResponse = ListHexagramsResponses[keyof ListHexagramsResponses]; export type GetRandomHexagramData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/iching/hexagrams/random'; }; export type GetRandomHexagramErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * No hexagrams available. */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetRandomHexagramError = GetRandomHexagramErrors[keyof GetRandomHexagramErrors]; export type GetRandomHexagramResponses = { /** * A random hexagram with full details. */ 200: Hexagram; }; export type GetRandomHexagramResponse = GetRandomHexagramResponses[keyof GetRandomHexagramResponses]; export type LookupHexagramData = { body?: never; path?: never; query: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Six-digit binary pattern (0=yin/broken, 1=yang/solid) from bottom to top. */ lines: string; }; url: '/iching/hexagrams/lookup'; }; export type LookupHexagramErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * No hexagram found for pattern. */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type LookupHexagramError = LookupHexagramErrors[keyof LookupHexagramErrors]; export type LookupHexagramResponses = { /** * Matching hexagram. */ 200: Hexagram; }; export type LookupHexagramResponse = LookupHexagramResponses[keyof LookupHexagramResponses]; export type GetHexagramData = { body?: never; path: { /** * Hexagram number in King Wen sequence (1-64). */ number: number; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/iching/hexagrams/{number}'; }; export type GetHexagramErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Hexagram not found. */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetHexagramError = GetHexagramErrors[keyof GetHexagramErrors]; export type GetHexagramResponses = { /** * Full hexagram details. */ 200: Hexagram; }; export type GetHexagramResponse = GetHexagramResponses[keyof GetHexagramResponses]; export type CastReadingData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Optional seed for reproducible castings. Same seed = same casting every time. Pass any unique identifier (userId, session token, question hash). Omit for random casting. */ seed?: string; }; url: '/iching/cast'; }; export type CastReadingErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type CastReadingError = CastReadingErrors[keyof CastReadingErrors]; export type CastReadingResponses = { /** * Complete I-Ching reading with primary and resulting hexagrams. */ 200: { /** * The seed used for this casting (if provided) */ seed?: string; hexagram?: Hexagram & unknown; /** * Line values (6-9) from bottom to top. 6=old yin (changing), 7=young yang, 8=young yin, 9=old yang (changing) */ lines: Array; /** * Positions of changing lines (1-6, bottom to top) */ changingLinePositions: Array; resultingHexagram?: Hexagram & unknown; }; }; export type CastReadingResponse = CastReadingResponses[keyof CastReadingResponses]; export type ListTrigramsData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/iching/trigrams'; }; export type ListTrigramsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListTrigramsError = ListTrigramsErrors[keyof ListTrigramsErrors]; export type ListTrigramsResponses = { /** * List of all 8 trigrams with basic information. */ 200: { /** * Total number of I-Ching trigrams (always 8). */ total: number; /** * All 8 trigrams (bagua) with basic details. */ trigrams: Array; }; }; export type ListTrigramsResponse = ListTrigramsResponses[keyof ListTrigramsResponses]; export type GetTrigramData = { body?: never; path: { /** * Trigram number (1-8) or English name (Heaven, Earth, Thunder, Wind, Water, Fire, Mountain, Lake). */ id: string; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/iching/trigrams/{id}'; }; export type GetTrigramErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Trigram not found. */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetTrigramError = GetTrigramErrors[keyof GetTrigramErrors]; export type GetTrigramResponses = { /** * Trigram details. */ 200: Trigram; }; export type GetTrigramResponse = GetTrigramResponses[keyof GetTrigramResponses]; export type GetCrystalsByZodiacData = { body?: never; path: { /** * Zodiac sign name, case-insensitive (e.g., pisces, Pisces, PISCES all work). Valid: aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces. */ sign: 'aries' | 'taurus' | 'gemini' | 'cancer' | 'leo' | 'virgo' | 'libra' | 'scorpio' | 'sagittarius' | 'capricorn' | 'aquarius' | 'pisces'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Maximum items to return per page. Range: 1-30, default 20. */ limit?: number; /** * Number of items to skip for pagination. Default 0. */ offset?: number | null; }; url: '/crystals/zodiac/{sign}'; }; export type GetCrystalsByZodiacErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetCrystalsByZodiacError = GetCrystalsByZodiacErrors[keyof GetCrystalsByZodiacErrors]; export type GetCrystalsByZodiacResponses = { /** * Paginated list of crystals associated with the zodiac sign */ 200: { /** * The zodiac sign that was queried. */ sign: string; /** * Total number of crystals associated with this zodiac sign. */ total: number; /** * Maximum crystals returned per page. */ limit: number; /** * Number of crystals skipped. */ offset: number; /** * Crystal summaries for this zodiac sign. Call /crystals/:id for full healing properties. */ crystals: Array<{ /** * Crystal display name. */ name: string; /** * URL-safe crystal identifier for detail lookup. */ id: string; /** * URL to crystal photograph for visual identification. */ imageUrl: string | null; /** * Primary colors of this crystal variety. Null when color data is unavailable. */ colors: Array | null; }>; }; }; export type GetCrystalsByZodiacResponse = GetCrystalsByZodiacResponses[keyof GetCrystalsByZodiacResponses]; export type GetCrystalsByChakraData = { body?: never; path: { /** * Chakra name, case-insensitive (e.g., heart, Heart, HEART all work). Valid: Root, Sacral, Solar Plexus, Heart, Throat, Third Eye, Crown. */ chakra: 'Root' | 'Sacral' | 'Solar Plexus' | 'Heart' | 'Throat' | 'Third Eye' | 'Crown'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Maximum items to return per page. Range: 1-30, default 20. */ limit?: number; /** * Number of items to skip for pagination. Default 0. */ offset?: number | null; }; url: '/crystals/chakra/{chakra}'; }; export type GetCrystalsByChakraErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetCrystalsByChakraError = GetCrystalsByChakraErrors[keyof GetCrystalsByChakraErrors]; export type GetCrystalsByChakraResponses = { /** * Paginated list of crystals for the specified chakra */ 200: { /** * The chakra energy center that was queried. */ chakra: string; /** * Total number of crystals associated with this chakra. */ total: number; /** * Maximum crystals returned per page. */ limit: number; /** * Number of crystals skipped. */ offset: number; /** * Crystal summaries for this chakra. Call /crystals/:id for full healing properties. */ crystals: Array<{ /** * Crystal display name. */ name: string; /** * URL-safe crystal identifier for detail lookup. */ id: string; /** * URL to crystal photograph for visual identification. */ imageUrl: string | null; /** * Primary colors of this crystal variety. Null when color data is unavailable. */ colors: Array | null; }>; }; }; export type GetCrystalsByChakraResponse = GetCrystalsByChakraResponses[keyof GetCrystalsByChakraResponses]; export type GetCrystalsByElementData = { body?: never; path: { /** * Element name, case-insensitive (e.g., water, Water, WATER all work). Valid: Earth, Water, Fire, Air, Storm. */ element: 'Earth' | 'Water' | 'Fire' | 'Air' | 'Storm'; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Maximum items to return per page. Range: 1-30, default 20. */ limit?: number; /** * Number of items to skip for pagination. Default 0. */ offset?: number | null; }; url: '/crystals/element/{element}'; }; export type GetCrystalsByElementErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetCrystalsByElementError = GetCrystalsByElementErrors[keyof GetCrystalsByElementErrors]; export type GetCrystalsByElementResponses = { /** * Paginated list of crystals for the specified element */ 200: { /** * The element that was queried. */ element: string; /** * Total number of crystals associated with this element. */ total: number; /** * Maximum crystals returned per page. */ limit: number; /** * Number of crystals skipped. */ offset: number; /** * Crystal summaries for this element. Call /crystals/:id for full healing properties. */ crystals: Array<{ /** * Crystal display name. */ name: string; /** * URL-safe crystal identifier for detail lookup. */ id: string; /** * URL to crystal photograph for visual identification. */ imageUrl: string | null; /** * Primary colors of this crystal variety. Null when color data is unavailable. */ colors: Array | null; }>; }; }; export type GetCrystalsByElementResponse = GetCrystalsByElementResponses[keyof GetCrystalsByElementResponses]; export type GetBirthstonesData = { body?: never; path: { /** * Birth month as a number from 1 (January) to 12 (December). */ month: number; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/crystals/birthstone/{month}'; }; export type GetBirthstonesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetBirthstonesError = GetBirthstonesErrors[keyof GetBirthstonesErrors]; export type GetBirthstonesResponses = { /** * Birthstone crystals for the specified month */ 200: { /** * The month number that was queried (1-12). */ month: number; /** * Full name of the queried month. */ monthName: string; /** * Number of birthstone crystals for this month. */ total: number; /** * Birthstone crystals for this month. Call /crystals/:id for full healing properties. */ crystals: Array<{ /** * Crystal display name. */ name: string; /** * URL-safe crystal identifier for detail lookup. */ id: string; /** * URL to crystal photograph for visual identification. */ imageUrl: string | null; /** * Primary colors of this crystal variety. Null when color data is unavailable. */ colors: Array | null; }>; }; }; export type GetBirthstonesResponse = GetBirthstonesResponses[keyof GetBirthstonesResponses]; export type SearchCrystalsData = { body?: never; path?: never; query: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Search query (2-50 characters). Matches against crystal names, keywords, descriptions, and meaning fields. Case-insensitive partial matching. */ q: string; /** * Maximum items to return per page. Range: 1-50, default 20. */ limit?: number; /** * Number of items to skip for pagination. Default 0. */ offset?: number | null; }; url: '/crystals/search'; }; export type SearchCrystalsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type SearchCrystalsError = SearchCrystalsErrors[keyof SearchCrystalsErrors]; export type SearchCrystalsResponses = { /** * Crystals matching the search query */ 200: { /** * The search query that was used. */ query: string; /** * Total number of crystals matching the query. */ total: number; /** * Maximum crystals returned per page. */ limit: number; /** * Number of crystals skipped. */ offset: number; /** * Matching crystal summaries. Call /crystals/:id for full healing properties. */ crystals: Array<{ /** * Crystal display name. */ name: string; /** * URL-safe crystal identifier for detail lookup. */ id: string; /** * URL to crystal photograph for visual identification. */ imageUrl: string | null; /** * Primary colors of this crystal variety. Null when color data is unavailable. */ colors: Array | null; }>; }; }; export type SearchCrystalsResponse = SearchCrystalsResponses[keyof SearchCrystalsResponses]; export type GetCrystalPairingsData = { body?: never; path: { /** * URL-safe crystal identifier to find pairings for, case-insensitive (e.g., "amethyst", "Amethyst", "rose-quartz" all resolve). */ id: string; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/crystals/pairings/{id}'; }; export type GetCrystalPairingsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Crystal not found in database */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetCrystalPairingsError = GetCrystalPairingsErrors[keyof GetCrystalPairingsErrors]; export type GetCrystalPairingsResponses = { /** * Crystal pairing recommendations */ 200: { /** * The crystal identifier that pairings were requested for. */ crystal: string; /** * Display name of the source crystal. */ name: string; /** * Number of recommended crystal pairings. */ count: number; /** * Crystals recommended for use alongside the source crystal for synergistic healing. */ pairings: Array<{ /** * Paired crystal display name. */ name: string; /** * URL-safe identifier for the paired crystal. */ id: string; /** * URL to paired crystal photograph. */ imageUrl: string | null; /** * Brief overview of the paired crystal. */ description: string; /** * Chakra associations for the paired crystal. */ chakras: Array; /** * Healing property keywords for the paired crystal. Null when keyword data is unavailable. */ keywords: Array | null; }>; }; }; export type GetCrystalPairingsResponse = GetCrystalPairingsResponses[keyof GetCrystalPairingsResponses]; export type GetDailyCrystalData = { body?: { /** * Optional seed for reproducible readings. Same seed + same date = same crystal every time. Pass any unique identifier (userId, email hash, session token). Omit for anonymous daily readings. */ seed?: string; /** * Date for the reading in YYYY-MM-DD format. Defaults to today (UTC). Useful for viewing past daily readings or pre-generating future ones. */ date?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/crystals/daily'; }; export type GetDailyCrystalErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetDailyCrystalError = GetDailyCrystalErrors[keyof GetDailyCrystalErrors]; export type GetDailyCrystalResponses = { /** * Daily crystal teaser with summary information */ 200: { /** * The date used for crystal selection (UTC). */ date: string; /** * Computed seed used for this reading. Same seed always produces the same crystal. */ seed: string; /** * Display name of the crystal selected for this date. */ name: string; /** * URL-safe identifier. Call /crystals/:id for full healing properties. */ id: string; /** * URL to crystal photograph. Use for daily crystal card display and visual features. */ imageUrl: string | null; /** * Overview of the crystal covering primary healing purpose and benefits. */ description: string; /** * Chakra energy centers this crystal resonates with for energy healing practice. */ chakras: Array; /** * Zodiac signs this crystal is traditionally associated with. Null when zodiac data is unavailable. */ zodiacSigns: Array | null; /** * Positive affirmation aligned with the selected crystal. Use for daily affirmation features and meditation guidance. */ affirmation: string; }; }; export type GetDailyCrystalResponse = GetDailyCrystalResponses[keyof GetDailyCrystalResponses]; export type GetRandomCrystalData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/crystals/random'; }; export type GetRandomCrystalErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetRandomCrystalError = GetRandomCrystalErrors[keyof GetRandomCrystalErrors]; export type GetRandomCrystalResponses = { /** * A randomly selected crystal with summary information */ 200: { /** * Display name of the randomly selected crystal. */ name: string; /** * URL-safe identifier. Call /crystals/:id for full healing properties. */ id: string; /** * URL to crystal photograph for visual display. */ imageUrl: string | null; /** * Overview of the crystal covering primary healing purpose and benefits. */ description: string; /** * Chakra energy centers this crystal resonates with. */ chakras: Array; /** * Zodiac signs this crystal is traditionally associated with. Null when zodiac data is unavailable. */ zodiacSigns: Array | null; /** * Positive affirmation aligned with the selected crystal energy. */ affirmation: string; }; }; export type GetRandomCrystalResponse = GetRandomCrystalResponses[keyof GetRandomCrystalResponses]; export type ListCrystalColorsData = { body?: never; path?: never; query?: never; url: '/crystals/colors'; }; export type ListCrystalColorsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListCrystalColorsError = ListCrystalColorsErrors[keyof ListCrystalColorsErrors]; export type ListCrystalColorsResponses = { /** * All unique crystal colors sorted alphabetically */ 200: { /** * Total number of unique color values in the database. */ count: number; /** * Alphabetically sorted list of all unique crystal colors. Pass any value to the color filter on GET /crystals. */ colors: Array; }; }; export type ListCrystalColorsResponse = ListCrystalColorsResponses[keyof ListCrystalColorsResponses]; export type ListCrystalPlanetsData = { body?: never; path?: never; query?: never; url: '/crystals/planets'; }; export type ListCrystalPlanetsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListCrystalPlanetsError = ListCrystalPlanetsErrors[keyof ListCrystalPlanetsErrors]; export type ListCrystalPlanetsResponses = { /** * All unique planetary associations sorted alphabetically */ 200: { /** * Total number of unique planetary values in the database. */ count: number; /** * Alphabetically sorted list of all unique planetary associations. Pass any value to the planet filter on GET /crystals. */ planets: Array; }; }; export type ListCrystalPlanetsResponse = ListCrystalPlanetsResponses[keyof ListCrystalPlanetsResponses]; export type ListCrystalsData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Filter by chakra association, case-insensitive. Valid values: Root, Sacral, Solar Plexus, Heart, Throat, Third Eye, Crown. */ chakra?: 'Root' | 'Sacral' | 'Solar Plexus' | 'Heart' | 'Throat' | 'Third Eye' | 'Crown'; /** * Filter by zodiac sign, case-insensitive. Valid values: aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces. */ zodiac?: 'aries' | 'taurus' | 'gemini' | 'cancer' | 'leo' | 'virgo' | 'libra' | 'scorpio' | 'sagittarius' | 'capricorn' | 'aquarius' | 'pisces'; /** * Filter by elemental association, case-insensitive. Valid values: Earth, Water, Fire, Air, Storm. */ element?: 'Earth' | 'Water' | 'Fire' | 'Air' | 'Storm'; /** * Filter by crystal color (partial match, case-insensitive). E.g., "pink", "green", "blue", "purple". Use GET /colors for valid values. */ color?: string; /** * Filter by planetary association (partial match, case-insensitive). E.g., "Venus", "Moon", "Jupiter". Use GET /planets for valid values. */ planet?: string; /** * Maximum items to return per page. Range: 1-100, default 20. */ limit?: number; /** * Number of items to skip for pagination. Default 0. */ offset?: number | null; }; url: '/crystals'; }; export type ListCrystalsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListCrystalsError = ListCrystalsErrors[keyof ListCrystalsErrors]; export type ListCrystalsResponses = { /** * Paginated list of crystals with summary information */ 200: { /** * Total number of crystals matching the filter criteria. */ total: number; /** * Maximum crystals returned per page. */ limit: number; /** * Number of crystals skipped. */ offset: number; /** * Crystal summaries for the current page. */ crystals: Array<{ /** * Crystal display name. */ name: string; /** * URL-safe crystal identifier for detail lookup. */ id: string; /** * URL to crystal photograph for visual identification. */ imageUrl: string | null; /** * Primary colors of this crystal variety. Null when color data is unavailable. */ colors: Array | null; /** * Chakra energy centers this crystal resonates with. One of: Root, Sacral, Solar Plexus, Heart, Throat, Third Eye, Crown. */ chakras: Array; }>; }; }; export type ListCrystalsResponse = ListCrystalsResponses[keyof ListCrystalsResponses]; export type GetCrystalData = { body?: never; path: { /** * URL-safe crystal identifier, case-insensitive (e.g., "amethyst", "Amethyst", "rose-quartz" all resolve). Must match an entry in the database. */ id: string; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/crystals/{id}'; }; export type GetCrystalErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Crystal not found in database */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetCrystalError = GetCrystalErrors[keyof GetCrystalErrors]; export type GetCrystalResponses = { /** * Complete crystal healing properties with all associations */ 200: { /** * Display name of the crystal or healing stone. */ name: string; /** * URL-safe identifier for the crystal. */ id: string; /** * URL to a high-quality crystal photograph. Use for visual crystal guides, product listings, and crystal identification features. */ imageUrl: string | null; /** * Overview of the crystal covering its primary healing purpose, spiritual significance, and key benefits. */ description: string; /** * Detailed healing interpretations across three areas: spiritual and metaphysical, emotional and psychological, and physical body associations. */ meaning: { /** * Spiritual and metaphysical healing properties including energy work, meditation benefits, and higher consciousness connections. Null when spiritual interpretation is unavailable. */ spiritual: string | null; /** * Emotional healing properties including stress relief, relationship support, and emotional balance benefits. */ emotional: string; /** * Physical healing associations traditionally attributed to this crystal in crystal healing practice. Null when physical healing data is unavailable. */ physical: string | null; }; /** * Chakra energy centers this crystal resonates with. One of: Root, Sacral, Solar Plexus, Heart, Throat, Third Eye, Crown. */ chakras: Array; /** * Zodiac signs this crystal is traditionally associated with. Null when zodiac data is unavailable. Useful for personalized crystal recommendations based on birth chart. */ zodiacSigns: Array | null; /** * Ruling planet or celestial body associated with this crystal in astrological tradition. Null when planetary association is unavailable. */ planet: string | null; /** * Elemental associations (Earth, Water, Fire, Air, Storm) connecting the crystal to natural forces and energy types. Null when elemental data is unavailable. */ elements: Array | null; /** * Primary colors of this crystal variety. Null when color data is unavailable. Useful for color-based crystal selection and filtering. */ colors: Array | null; /** * Mohs hardness scale rating (1-10). Indicates durability for jewelry use. Quartz family is 7, Diamond is 10, Selenite is 2. */ hardness: number; /** * Numerological vibration number linking this crystal to numerology meanings. Connects crystal healing with numerology practice. */ numericalVibration: number; /** * Keywords capturing the core healing properties and spiritual themes of this crystal. The count varies by stone, from a single keyword up to twenty. Null when keyword data is unavailable. */ keywords: Array | null; /** * Birth month (1-12) if this crystal is a traditional birthstone. Null if not a birthstone. January is 1, December is 12. */ birthMonth: number | null; /** * Positive affirmation aligned with this crystal energy. Use for meditation, journaling, or daily affirmation features. */ affirmation: string; /** * Crystal identifiers that pair well with this stone for enhanced healing combinations. Use for crystal grid and pairing recommendations. */ pairsWith: Array; }; }; export type GetCrystalResponse = GetCrystalResponses[keyof GetCrystalResponses]; export type SearchDreamSymbolsData = { body?: never; path?: never; query?: { /** * Search query to match against symbol names and meanings. Case-insensitive. */ q?: string; /** * Filter symbols by starting letter (a-z). Case-insensitive. */ letter?: string; /** * Maximum items to return per page. Range: 1-50, default 20. */ limit?: number; /** * Number of items to skip for pagination. Default 0. */ offset?: number | null; }; url: '/dreams/symbols'; }; export type SearchDreamSymbolsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type SearchDreamSymbolsError = SearchDreamSymbolsErrors[keyof SearchDreamSymbolsErrors]; export type SearchDreamSymbolsResponses = { /** * Paginated list of dream symbols with basic information. */ 200: { /** * Total number of dream symbols matching your search or filter criteria. */ total: number; /** * Page size used for this response. */ limit: number; /** * Number of symbols skipped. Use with limit for pagination. */ offset: number; /** * Dream symbols for the current page. Use /symbols/{id} to get full interpretation. */ symbols: Array; }; }; export type SearchDreamSymbolsResponse = SearchDreamSymbolsResponses[keyof SearchDreamSymbolsResponses]; export type GetRandomSymbolsData = { body?: never; path?: never; query?: { /** * Number of random symbols to return (1-10). Default: 1. */ count?: number; }; url: '/dreams/symbols/random'; }; export type GetRandomSymbolsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetRandomSymbolsError = GetRandomSymbolsErrors[keyof GetRandomSymbolsErrors]; export type GetRandomSymbolsResponses = { /** * Random dream symbol(s) with full interpretations. */ 200: { symbols: Array; }; }; export type GetRandomSymbolsResponse = GetRandomSymbolsResponses[keyof GetRandomSymbolsResponses]; export type GetSymbolLetterCountsData = { body?: never; path?: never; query?: never; url: '/dreams/symbols/letters'; }; export type GetSymbolLetterCountsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetSymbolLetterCountsError = GetSymbolLetterCountsErrors[keyof GetSymbolLetterCountsErrors]; export type GetSymbolLetterCountsResponses = { /** * Symbol counts organized by starting letter. */ 200: { /** * Map of starting letter to symbol count. Use to build A-Z dream dictionary navigation showing how many dream meanings exist per letter. */ letters: { [key: string]: number; }; /** * Total number of dream symbols in the complete dream interpretation database. */ total: number; }; }; export type GetSymbolLetterCountsResponse = GetSymbolLetterCountsResponses[keyof GetSymbolLetterCountsResponses]; export type GetDreamSymbolData = { body?: never; path: { /** * Unique symbol identifier in kebab-case (e.g., "snake", "being-chased", "teeth-falling-out"). */ id: string; }; query?: never; url: '/dreams/symbols/{id}'; }; export type GetDreamSymbolErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Symbol not found. */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetDreamSymbolError = GetDreamSymbolErrors[keyof GetDreamSymbolErrors]; export type GetDreamSymbolResponses = { /** * Full dream symbol with interpretation. */ 200: DreamSymbol; }; export type GetDreamSymbolResponse = GetDreamSymbolResponses[keyof GetDreamSymbolResponses]; export type GetDailyDreamSymbolData = { body?: { /** * Optional seed for reproducible readings. Same seed + same date = same symbol every time. Pass any unique identifier (userId, email hash, session token). Omit for anonymous daily readings. */ seed?: string; /** * Date for the reading in YYYY-MM-DD format. Defaults to today (UTC). Useful for viewing past daily readings or pre-generating future ones. */ date?: string; }; path?: never; query?: never; url: '/dreams/daily'; }; export type GetDailyDreamSymbolErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetDailyDreamSymbolError = GetDailyDreamSymbolErrors[keyof GetDailyDreamSymbolErrors]; export type GetDailyDreamSymbolResponses = { /** * Daily dream symbol with interpretation */ 200: { /** * Date of the daily dream symbol in YYYY-MM-DD format (UTC). Determines which symbol is selected for seeded readings. */ date: string; /** * Seed used for this daily reading. Same seed on the same date always produces the identical symbol. */ seed: string; symbol: { /** * Unique symbol identifier in kebab-case. Use this to fetch full details via /symbols/{id}. */ id: string; /** * Display name of the dream symbol. */ name: string; /** * Starting letter (a-z) for alphabetical navigation. */ letter: string; /** * Full psychological dream interpretation explaining the subconscious symbolism, emotional significance, and waking-life connections. */ meaning: string; }; /** * Concise daily message summarizing the dream symbol and its key themes for quick reflection. */ dailyMessage: string; }; }; export type GetDailyDreamSymbolResponse = GetDailyDreamSymbolResponses[keyof GetDailyDreamSymbolResponses]; export type ListAngelNumbersData = { body?: never; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Maximum items to return per page. Range: 1-50, default 20. */ limit?: number; /** * Number of items to skip for pagination. Default 0. */ offset?: number | null; /** * Filter results by angel number pattern type. "repeating" returns numbers like 111, 444, 7777. "sequential" returns patterns like 1234. "mirror" returns palindrome or alternating patterns like 1212, 717. "master" returns 11, 22, 33. "root" returns single digits 0-9. "compound" returns mixed sequences with no pure pattern like 911, 1122. */ type?: 'repeating' | 'sequential' | 'mirror' | 'master' | 'root' | 'compound'; }; url: '/angel-numbers/numbers'; }; export type ListAngelNumbersErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListAngelNumbersError = ListAngelNumbersErrors[keyof ListAngelNumbersErrors]; export type ListAngelNumbersResponses = { /** * List of angel numbers with summary information */ 200: { /** * Total number of angel numbers matching the applied filters. The full catalog size when unfiltered, fewer when filtered by type. */ total: number; /** * Maximum items returned per page. */ limit: number; /** * Number of items skipped from the start of the result set. */ offset: number; /** * Array of angel number summaries for the current page. */ numbers: Array<{ /** * Angel number sequence as a string. Common patterns include triple repeating (111-999), quad repeating (1111-9999), master numbers (11, 22, 33), mirror patterns (1212), and sequential numbers (1234). */ number: string; /** * Short descriptive title capturing the core theme and spiritual significance of this angel number. */ title: string; /** * One to two sentence summary of the divine message. Ideal for push notifications, daily guidance widgets, and quick reference lookups. */ coreMessage: string; /** * Pattern classification of the angel number. "repeating" means all digits are the same (111, 4444). "sequential" means consecutive digits (1234). "mirror" means palindrome or alternating pattern (1212, 1221). "master" means numerology master number (11, 22, 33). "root" means single digit (0-9). "compound" means a mixed sequence with no pure pattern (911, 1122). */ type: string; /** * Numerology digit root calculated by summing all digits and reducing to a single digit. Links each angel number to foundational numerology meaning. Master numbers 11, 22, 33 are preserved without further reduction. */ digitRoot: number; /** * Five to eight keywords capturing the spiritual themes and energy of this angel number. Useful for search, filtering, and content generation. */ keywords: Array; /** * Overall energy classification. "positive" indicates encouraging, uplifting energy. "neutral" indicates transitional energy (neither purely positive nor cautionary). "cautionary" indicates a gentle warning to rebalance or pay attention. */ energy: string; }>; }; }; export type ListAngelNumbersResponse = ListAngelNumbersResponses[keyof ListAngelNumbersResponses]; export type GetAngelNumberData = { body?: never; path: { /** * Angel number sequence to look up (e.g., "111", "444", "1212", "1234"). Must match an entry in the database. */ number: string; }; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/angel-numbers/numbers/{number}'; }; export type GetAngelNumberErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Angel number not found in database */ 404: { /** * Human-readable error message. May change wording — do not parse programmatically. */ error: string; /** * Machine-readable error code. Stable identifier for programmatic error handling. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetAngelNumberError = GetAngelNumberErrors[keyof GetAngelNumberErrors]; export type GetAngelNumberResponses = { /** * Complete angel number meaning with all interpretations */ 200: { /** * Angel number sequence as a string. Common patterns include triple repeating (111-999), quad repeating (1111-9999), master numbers (11, 22, 33), mirror patterns (1212), and sequential numbers (1234). */ number: string; /** * Short descriptive title capturing the core theme and spiritual significance of this angel number. */ title: string; /** * One to two sentence summary of the divine message. Ideal for push notifications, daily guidance widgets, and quick reference lookups. */ coreMessage: string; /** * Pattern classification of the angel number. "repeating" means all digits are the same (111, 4444). "sequential" means consecutive digits (1234). "mirror" means palindrome or alternating pattern (1212, 1221). "master" means numerology master number (11, 22, 33). "root" means single digit (0-9). "compound" means a mixed sequence with no pure pattern (911, 1122). */ type: string; /** * Numerology digit root calculated by summing all digits and reducing to a single digit. Links each angel number to foundational numerology meaning. Master numbers 11, 22, 33 are preserved without further reduction. */ digitRoot: number; /** * Five to eight keywords capturing the spiritual themes and energy of this angel number. Useful for search, filtering, and content generation. */ keywords: Array; /** * Overall energy classification. "positive" indicates encouraging, uplifting energy. "neutral" indicates transitional energy (neither purely positive nor cautionary). "cautionary" indicates a gentle warning to rebalance or pay attention. */ energy: string; meaning: { /** * Two to three paragraph spiritual interpretation covering divine guidance, higher purpose, and the metaphysical significance of this angel number sequence. */ spiritual: string; /** * Love and relationship interpretation covering singles, couples, and those healing from past relationships. Includes romantic guidance and partnership advice. */ love: string; /** * Career and vocation guidance: professional opportunities, calling, and practical work advice aligned with this angel number energy. Money and finances are returned separately in the money field. */ career: string; /** * Money, finances, and material abundance guidance, kept distinct from career and vocation. Covers income, spending, debt, and prosperity mindset for this angel number. */ money: string; /** * Twin flame connection interpretation covering union, separation, and spiritual growth within the twin flame journey. */ twinFlame: string; }; /** * Biblical and religious perspective on the sequence, framed honestly. States plainly when a number is not a scriptural concept rather than inventing scripture. */ biblical: string; /** * Shadow or cautionary reading: the misuse, over-reliance, or imbalance this sequence can signal. Complements the energy classification. */ shadow: string; /** * Positive affirmation aligned with this angel number. Can be used for daily affirmation features, meditation guidance, or spiritual journal prompts. */ affirmation: string; /** * Three to five specific, actionable steps to take when you see this angel number. Practical spiritual guidance for daily life. */ actionSteps: Array; }; }; export type GetAngelNumberResponse = GetAngelNumberResponses[keyof GetAngelNumberResponses]; export type AnalyzeNumberSequenceData = { body?: never; path?: never; query: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Number sequence to analyze (1-8 digits). Can be any number the user has encountered: clock times (1111), addresses (717), receipts (888), license plates (4444), or any repeating pattern. */ number: string; /** * Where the number was seen. When supplied, the response adds a contextNote tailoring the reading to the sighting: clock (a glanced time), receipt (a purchase), license-plate (in transit), phone (a call or notification), address (a home or place), price (a total or amount). */ context?: 'clock' | 'receipt' | 'license-plate' | 'phone' | 'address' | 'price'; }; url: '/angel-numbers/lookup'; }; export type AnalyzeNumberSequenceErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type AnalyzeNumberSequenceError = AnalyzeNumberSequenceErrors[keyof AnalyzeNumberSequenceErrors]; export type AnalyzeNumberSequenceResponses = { /** * Complete analysis of the number sequence with pattern classification and meaning */ 200: { /** * The number sequence that was analyzed. */ number: string; /** * Pattern classification detected for this number. "repeating" means all same digits. "sequential" means consecutive ascending or descending. "mirror" means palindrome or alternating pattern. "master" means numerology master number. "root" means single digit. "compound" means a multi-digit sequence with no pure pattern (e.g. 911, 1122). */ type: string; /** * Numerology digit root from summing and reducing all digits. Links to foundational single-digit meaning. Master numbers 11, 22, 33 are preserved. */ digitRoot: number; /** * Total number of digits in the sequence. */ digits: number; /** * Count of unique digits. A repeating number like 111 has 1 unique digit; 1234 has 4. */ uniqueDigits: number; /** * Whether the number reads the same forwards and backwards (e.g., 1221, 1001). */ isPalindrome: boolean; /** * Whether all digits are identical (e.g., 111, 4444, 777). */ isRepeating: boolean; /** * Full angel number meaning if this number exists in the curated database (75+ known sequences). Null if the number is not in the database, in which case use the analysis fields (type, digitRoot) and the digitRootMeaning fallback for interpretation. */ knownMeaning: { /** * Title of the matched angel number meaning. */ title: string; /** * Core message summary. */ coreMessage: string; /** * Energy classification (positive, neutral, cautionary). */ energy: string; /** * Keywords for this angel number. */ keywords: Array; /** * Detailed interpretations across life areas. */ meaning: { /** * Spiritual interpretation covering divine guidance, higher purpose, and metaphysical significance. */ spiritual: string; /** * Love and relationship interpretation for singles, couples, and those healing from past relationships. */ love: string; /** * Career and vocation guidance. Money and finances are returned separately in the money field. */ career: string; /** * Money, finances, and material abundance guidance, distinct from career. */ money: string; /** * Twin flame connection interpretation covering union, separation, and spiritual growth. */ twinFlame: string; }; /** * Biblical and religious perspective, framed honestly. */ biblical: string; /** * Shadow or cautionary reading for this number. */ shadow: string; /** * Positive affirmation for this number. */ affirmation: string; /** * Actionable steps when you see this number. */ actionSteps: Array; } | null; /** * The foundational meaning of this number based on its digit root. Every number reduces to a root digit (0-9) or master number (11, 22, 33), which provides the base interpretation even for unknown sequences. */ digitRootMeaning: { /** * Root digit number (0-9) or master number (11, 22, 33). */ number: string; /** * Title of the root digit meaning in numerology. */ title: string; /** * Core message of the foundational root digit. */ coreMessage: string; /** * Full life-area interpretation of the underlying root digit. For an unknown sequence this is the substantive reading to display, so a synchronicity app never dead-ends on an arbitrary number. */ meaning: { /** * Spiritual interpretation of the root digit, covering divine guidance, higher purpose, and metaphysical significance. */ spiritual: string; /** * Love and relationship interpretation of the root digit, for singles, couples, and those healing from past relationships. */ love: string; /** * Career and vocation guidance for the root digit. Money and finances are returned separately in the money field. */ career: string; /** * Money, finances, and material abundance guidance for the root digit, kept distinct from career. */ money: string; /** * Twin flame interpretation of the root digit, covering union, separation, and spiritual growth. */ twinFlame: string; }; /** * Keywords for the root digit. */ keywords: Array; /** * Affirmation for the root digit. */ affirmation: string; } | null; /** * Present only when the context query parameter is supplied. A short reading layered on top of the meaning that accounts for WHERE the number was seen (clock, receipt, license plate, phone, address, price), since the place of a sighting shifts its emphasis. */ contextNote?: string; }; }; export type AnalyzeNumberSequenceResponse = AnalyzeNumberSequenceResponses[keyof AnalyzeNumberSequenceResponses]; export type GetDailyAngelNumberData = { body?: { /** * Optional seed for reproducible readings. Same seed + same date = same angel number every time. Pass any unique identifier (userId, email hash, session token). Omit for anonymous daily readings. */ seed?: string; /** * Date for the reading in YYYY-MM-DD format. Defaults to today (UTC). Useful for viewing past daily readings or pre-generating future ones. */ date?: string; }; path?: never; query?: { /** * Response language (ISO 639-1). Supported: en, tr, de, es, hi, pt, fr, ru. Defaults to en. Languages without translations yet return English. */ lang?: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; }; url: '/angel-numbers/daily'; }; export type GetDailyAngelNumberErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetDailyAngelNumberError = GetDailyAngelNumberErrors[keyof GetDailyAngelNumberErrors]; export type GetDailyAngelNumberResponses = { /** * Daily angel number with complete interpretation */ 200: { /** * The date used for angel number selection (UTC). */ date: string; /** * Computed seed used for this reading. Same seed always produces the same angel number. */ seed: string; /** * Angel number sequence selected for today. Three or more digit repeating, sequential, or mirror pattern (e.g., 111, 444, 1212). */ number: string; /** * Short descriptive title capturing the core theme and spiritual significance of the daily angel number. */ title: string; /** * One to two sentence summary of the divine message for today. Ideal for push notifications, daily guidance widgets, and quick reference. */ coreMessage: string; /** * Pattern classification of the daily angel number. "repeating" means all digits are the same (111, 4444). "sequential" means consecutive digits (1234). "mirror" means palindrome or alternating pattern (1212, 1221). */ type: string; /** * Numerology digit root calculated by summing all digits and reducing to a single digit. Links the daily angel number to its foundational numerology meaning. */ digitRoot: number; /** * Overall energy classification. "positive" indicates encouraging, uplifting energy. "neutral" indicates transitional energy. "cautionary" indicates a gentle warning to rebalance or pay attention. */ energy: string; /** * Detailed interpretations across life areas for the daily angel number. */ meaning: { /** * Two to three paragraph spiritual interpretation covering divine guidance, higher purpose, and the metaphysical significance of the angel number selected for this date. */ spiritual: string; /** * Love and relationship interpretation covering singles, couples, and those healing from past relationships. Includes romantic guidance and partnership advice. */ love: string; /** * Career and vocation guidance: professional opportunities, calling, and practical work advice. Money and finances are returned separately in the money field. */ career: string; /** * Money, finances, and material abundance guidance, kept distinct from career and vocation. */ money: string; /** * Twin flame connection interpretation covering union, separation, and spiritual growth within the twin flame journey. */ twinFlame: string; }; /** * Biblical and religious perspective on the daily sequence, framed honestly. */ biblical: string; /** * Shadow or cautionary reading for the daily sequence. Complements the energy classification. */ shadow: string; /** * Five to eight keywords capturing the spiritual themes and energy of the daily angel number. Useful for search, filtering, and content generation. */ keywords: Array; /** * Positive affirmation aligned with the daily angel number. Use for daily affirmation features, meditation guidance, or spiritual journal prompts. */ affirmation: string; /** * Three to five specific, actionable steps to take today based on the angel number guidance. Practical spiritual advice for daily life. */ actionSteps: Array; }; }; export type GetDailyAngelNumberResponse = GetDailyAngelNumberResponses[keyof GetDailyAngelNumberResponses]; export type SearchCitiesData = { body?: never; path?: never; query: { /** * Place to search for, written the way a person would. Accepts a bare city (berlin), a city plus country (berlin germany), a comma-qualified place (richfield, utah), a fully qualified place (richfield, utah, united states), or a historic name (bombay, peking, constantinople). Commas are optional, and a qualifier the dataset spells differently, such as USA for United States, still resolves. Matched against city name, alternate names, state or province, and country. Add the state or country whenever the name is common, since that is what separates the six Springfields, and Richfield, Utah from Richfield, Minnesota. */ q: string; /** * Maximum items to return per page. Range: 1-50, default 10. */ limit?: number; /** * Number of items to skip for pagination. Default 0. */ offset?: number | null; }; url: '/location/search'; }; export type SearchCitiesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type SearchCitiesError = SearchCitiesErrors[keyof SearchCitiesErrors]; export type SearchCitiesResponses = { /** * Matching places, best match first, with coordinates, IANA timezone and UTC offset */ 200: { /** * Number of places matching the query across all pages, not the number returned in this response. Greater than 1 means the name is ambiguous, so show province and country and let the user confirm before using the result for a chart. */ total: number; /** * Page size used for this response. */ limit: number; /** * Number of places skipped. Use with limit to page through results. */ offset: number; /** * Matching places for the current page, best match first. Ordered by match quality, then population within equal quality: an exact name beats a qualified name such as richfield, utah, which beats a name merely starting with the query, which beats an incidental match on state or country. Take the first entry when total is 1, otherwise disambiguate on province and country. */ cities: Array<{ /** * City name as commonly used. Matches the local or internationally recognized name for the location. */ city: string; /** * State, province, canton, or administrative region. Show it whenever more than one result comes back: it is what separates Richfield, Utah from Richfield, Minnesota, and the six US Springfields from each other. Empty for the small number of places with no administrative division recorded. */ province: string; /** * Full country name in English. */ country: string; /** * ISO 3166-1 alpha-2 country code. Use for filtering cities by country or building country-specific location pickers. */ iso2: string; /** * Geographic latitude in decimal degrees (-90 to 90). Pass directly to birth chart, natal chart, horoscope, synastry, transit, kundli, and panchang API endpoints as the latitude parameter. */ latitude: number; /** * Geographic longitude in decimal degrees (-180 to 180). Pass directly to astrology, horoscope, and panchang API endpoints alongside latitude. */ longitude: number; /** * IANA timezone identifier following the tz database standard (e.g. Europe/Berlin, America/New_York, Asia/Tokyo). Always present. Pass THIS, not the numeric offset, into any chart or panchang request for a past date: the calculation endpoints resolve it to the offset that was actually in force on that date, including historical daylight saving. Also works directly with JavaScript Date, Luxon, day.js, or any date library. */ timezone: string; /** * UTC offset in decimal hours for TODAY at this place, already adjusted for daylight saving. Convenient for displaying local time now. For a birth date or any past date use the `timezone` field instead, since the offset in force then may differ. Examples: 1 for CET, 2 for CEST, -5 for EST, 5.5 for IST, 5.75 for Nepal. */ utcOffset: number; /** * Population estimate for the place. Breaks ties between results of equal match quality, so among several places matching equally well the largest leads. It never outranks a better match, which is why a small town still wins when its name is typed exactly. May be 0 for a hamlet or administrative seat that carries no published figure. */ population: number; }>; }; }; export type SearchCitiesResponse = SearchCitiesResponses[keyof SearchCitiesResponses]; export type ListCountriesData = { body?: never; path?: never; query?: { /** * Maximum items to return per page. Range: 1-250, default 50. */ limit?: number; /** * Number of items to skip for pagination. Default 0. */ offset?: number | null; }; url: '/location/countries'; }; export type ListCountriesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListCountriesError = ListCountriesErrors[keyof ListCountriesErrors]; export type ListCountriesResponses = { /** * Alphabetically sorted list of all countries with ISO codes and city counts */ 200: { /** * Total number of countries with at least one place in the dataset. */ total: number; /** * Page size used for this response. */ limit: number; /** * Number of countries skipped. Use with limit for pagination. */ offset: number; /** * Countries for the current page, sorted alphabetically by name. */ countries: Array<{ /** * Full country name in English. Use for display in location pickers and dropdown menus. */ name: string; /** * ISO 3166-1 alpha-2 country code. Use as the identifier when fetching cities for a specific country via the /countries/{iso2} endpoint. */ iso2: string; /** * ISO 3166-1 alpha-3 country code. Three-letter standard used in international data exchange. */ iso3: string; /** * Number of searchable places in this country, including small towns and administrative seats. Useful for showing coverage in a UI or sizing a dependent city dropdown. */ cityCount: number; }>; }; }; export type ListCountriesResponse = ListCountriesResponses[keyof ListCountriesResponses]; export type GetCitiesByCountryData = { body?: never; path: { /** * ISO 3166-1 alpha-2 country code, case-insensitive. Common codes: DE (Germany), FR (France), GB (United Kingdom), US (United States), ES (Spain), IT (Italy), NL (Netherlands), IN (India), BR (Brazil), JP (Japan). */ iso2: string; }; query?: { /** * Maximum items to return per page. Range: 1-100, default 20. */ limit?: number; /** * Number of items to skip for pagination. Default 0. */ offset?: number | null; }; url: '/location/countries/{iso2}'; }; export type GetCitiesByCountryErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetCitiesByCountryError = GetCitiesByCountryErrors[keyof GetCitiesByCountryErrors]; export type GetCitiesByCountryResponses = { /** * Cities in the specified country, sorted by population (largest first) */ 200: { /** * Total number of places available for this country across all pages. */ total: number; /** * Page size used for this response. */ limit: number; /** * Number of cities skipped. Use with limit for pagination. */ offset: number; /** * Cities for the current page, sorted by population (largest first). */ cities: Array<{ /** * City name as commonly used. Matches the local or internationally recognized name for the location. */ city: string; /** * State, province, canton, or administrative region. Show it whenever more than one result comes back: it is what separates Richfield, Utah from Richfield, Minnesota, and the six US Springfields from each other. Empty for the small number of places with no administrative division recorded. */ province: string; /** * Full country name in English. */ country: string; /** * ISO 3166-1 alpha-2 country code. Use for filtering cities by country or building country-specific location pickers. */ iso2: string; /** * Geographic latitude in decimal degrees (-90 to 90). Pass directly to birth chart, natal chart, horoscope, synastry, transit, kundli, and panchang API endpoints as the latitude parameter. */ latitude: number; /** * Geographic longitude in decimal degrees (-180 to 180). Pass directly to astrology, horoscope, and panchang API endpoints alongside latitude. */ longitude: number; /** * IANA timezone identifier following the tz database standard (e.g. Europe/Berlin, America/New_York, Asia/Tokyo). Always present. Pass THIS, not the numeric offset, into any chart or panchang request for a past date: the calculation endpoints resolve it to the offset that was actually in force on that date, including historical daylight saving. Also works directly with JavaScript Date, Luxon, day.js, or any date library. */ timezone: string; /** * UTC offset in decimal hours for TODAY at this place, already adjusted for daylight saving. Convenient for displaying local time now. For a birth date or any past date use the `timezone` field instead, since the offset in force then may differ. Examples: 1 for CET, 2 for CEST, -5 for EST, 5.5 for IST, 5.75 for Nepal. */ utcOffset: number; /** * Population estimate for the place. Breaks ties between results of equal match quality, so among several places matching equally well the largest leads. It never outranks a better match, which is why a small town still wins when its name is typed exactly. May be 0 for a hamlet or administrative seat that carries no published figure. */ population: number; }>; }; }; export type GetCitiesByCountryResponse = GetCitiesByCountryResponses[keyof GetCitiesByCountryResponses]; export type GetUsageStatsData = { body?: never; path?: never; query?: never; url: '/usage'; }; export type GetUsageStatsErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Subscription not found */ 404: { error: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type GetUsageStatsError = GetUsageStatsErrors[keyof GetUsageStatsErrors]; export type GetUsageStatsResponses = { /** * Usage statistics retrieved */ 200: { /** * Name of the subscription plan the API key belongs to. One flat plan covers every domain and the Remote MCP servers, so this is a quota tier, never a per product entitlement. */ plan: string; /** * Billable requests counted against the current calendar month. The quota window is the UTC calendar month and resets on the 1st at 12:00 AM UTC, never on your renewal date, so an annual plan refills every month and a plan bought mid month still refills on the 1st. Read from the same counter the rate limiter enforces on, so it never reports a rosier number than the limit that will 429 you. Cached responses still count. */ usedThisMonth: number; /** * Monthly request allowance for the plan. One request, API or MCP, equals one unit: there is no credit weighting and no per domain fee. */ requestsPerMonth: number; /** * Requests left before the monthly allowance is exhausted, floored at zero. Equal to requestsPerMonth minus usedThisMonth. Refills at the calendar month rollover, whose exact instant every API response carries as a Unix timestamp in the X-RateLimit-Reset header. */ remainingThisMonth: number; /** * Billing email the subscription is registered under. */ email: string; /** * Subscription lifecycle state. Values: active, cancelled (no longer renewing but usable until endDate), suspended (payment failed, usable until endDate), expired (past endDate), pending (checkout started, payment not captured). */ status: string; /** * ISO 8601 timestamp when the current billing period ends. A renewal extends this date in place. API access survives a cancelled or suspended status until this moment passes. This is a BILLING date, not a quota date: the monthly allowance resets on the 1st of each month independently of it. */ endDate: string; }; }; export type GetUsageStatsResponse = GetUsageStatsResponses[keyof GetUsageStatsResponses]; export type ListLanguagesData = { body?: never; path?: never; query?: never; url: '/languages'; }; export type ListLanguagesErrors = { /** * Validation error. `issues[]` lists every failed field. */ 400: { /** * First issue summary. */ error: string; code: 'validation_error'; /** * Every validation failure. Use this to rebuild a valid request. */ issues: Array<{ /** * Dot-separated field path, or "(root)" for top-level. */ path: string; message: string; /** * Zod issue code (invalid_type, too_small, too_big, invalid_string, ...). */ code?: string; /** * Expected type for invalid_type. */ expected?: string; /** * Minimum bound for too_small issues. */ minimum?: number | string; /** * Maximum bound for too_big issues. */ maximum?: number | string; inclusive?: boolean; /** * Format name for string issues (regex, email, url, uuid). */ format?: string; /** * Regex pattern when format is regex. */ pattern?: string; }>; }; /** * Invalid or missing API key */ 401: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header. */ 405: { error: string; code: 'method_not_allowed'; /** * Allowed HTTP methods for this path. Mirrors the Allow response header. */ allow: Array; /** * Link to the product page for this domain. */ docs?: string; }; /** * Monthly rate limit exceeded */ 429: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; /** * Internal server error */ 500: { /** * Human-readable error message. May change wording. */ error: string; /** * Machine-readable error code. Stable identifier. */ code: string; }; }; export type ListLanguagesError = ListLanguagesErrors[keyof ListLanguagesErrors]; export type ListLanguagesResponses = { /** * Supported languages */ 200: { /** * All language codes accepted by the `lang` query parameter. */ languages: Array<{ /** * ISO 639-1 language code. Pass this value as the `lang` query parameter. */ code: 'en' | 'tr' | 'de' | 'es' | 'hi' | 'pt' | 'fr' | 'ru'; /** * Language name in English. */ name: string; /** * Language name written in the language itself. */ nativeName: string; }>; }; }; export type ListLanguagesResponse = ListLanguagesResponses[keyof ListLanguagesResponses]; //# sourceMappingURL=types.gen.d.ts.map