PYTHON TUTORIAL

Vedic Astrology API Python Guide

Complete Python tutorial for integrating Vedic astrology calculations. Birth charts, dashas, doshas, and AI chatbot with production-ready code.

January 7, 2026 - 20 min read

Installation

# Install the official Vedika Python SDK
pip install vedika

# Or install with async support
pip install vedika[async]

# For data analysis features
pip install vedika[pandas]

Quick Start

from vedika import VedikaClient

# Initialize client
client = VedikaClient(api_key='YOUR_API_KEY')

# Generate birth chart
chart = client.birth_chart(
    datetime='1990-05-15T14:30:00+05:30',
    latitude=28.6139,
    longitude=77.2090
)

print(f"Ascendant: {chart.ascendant.sign}")
print(f"Moon Sign: {chart.moon.sign}")
print(f"Sun Sign: {chart.sun.sign}")

# Access all planets
for planet in chart.planets:
    print(f"{planet.name}: {planet.sign} at {planet.degree}°")

Birth Chart Analysis

from vedika import VedikaClient
from datetime import datetime

client = VedikaClient(api_key='YOUR_API_KEY')

def analyze_birth_chart(dob, tob, place_lat, place_lng):
    """Generate and analyze a complete birth chart."""

    # Get full birth chart
    chart = client.birth_chart(
        datetime=f"{dob}T{tob}",
        latitude=place_lat,
        longitude=place_lng,
        ayanamsa='lahiri'
    )

    analysis = {
        'ascendant': chart.ascendant,
        'planets': {},
        'houses': {},
        'yogas': [],
        'doshas': []
    }

    # Analyze each planet
    for planet in chart.planets:
        analysis['planets'][planet.name] = {
            'sign': planet.sign,
            'house': planet.house,
            'nakshatra': planet.nakshatra,
            'degree': planet.degree,
            'retrograde': planet.retrograde
        }

    # Check for yogas
    analysis['yogas'] = chart.yogas

    # Check for doshas
    if chart.has_mangal_dosha:
        analysis['doshas'].append('Mangal Dosha')
    if chart.has_kaal_sarp_dosha:
        analysis['doshas'].append('Kaal Sarp Dosha')

    return analysis

# Example usage
result = analyze_birth_chart(
    dob='1990-05-15',
    tob='14:30:00+05:30',
    place_lat=28.6139,
    place_lng=77.2090
)

print(f"Moon in {result['planets']['Moon']['sign']}")
print(f"Yogas found: {len(result['yogas'])}")

Dasha Calculations

from vedika import VedikaClient
from datetime import date

client = VedikaClient(api_key='YOUR_API_KEY')

def get_current_dasha(birth_datetime, lat, lng):
    """Get current Vimshottari dasha periods."""

    dasha = client.dasha(
        datetime=birth_datetime,
        latitude=lat,
        longitude=lng,
        system='vimshottari'
    )

    return {
        'mahadasha': dasha.current_mahadasha,
        'antardasha': dasha.current_antardasha,
        'pratyantardasha': dasha.current_pratyantardasha,
        'mahadasha_ends': dasha.mahadasha_end_date,
        'all_periods': dasha.all_mahadashas
    }

# Get dasha for someone born in 1990
dasha_info = get_current_dasha(
    '1990-05-15T14:30:00+05:30',
    28.6139,
    77.2090
)

print(f"Current Mahadasha: {dasha_info['mahadasha'].planet}")
print(f"Current Antardasha: {dasha_info['antardasha'].planet}")
print(f"Mahadasha ends: {dasha_info['mahadasha_ends']}")

Async Support

import asyncio
from vedika import AsyncVedikaClient

async def main():
    client = AsyncVedikaClient(api_key='YOUR_API_KEY')

    # Fetch multiple charts concurrently
    tasks = [
        client.birth_chart(
            datetime='1990-05-15T14:30:00+05:30',
            latitude=28.6139,
            longitude=77.2090
        ),
        client.panchang(
            date='2026-01-15',
            latitude=28.6139,
            longitude=77.2090
        ),
        client.dasha(
            datetime='1990-05-15T14:30:00+05:30',
            latitude=28.6139,
            longitude=77.2090
        )
    ]

    chart, panchang, dasha = await asyncio.gather(*tasks)

    print(f"Chart Ascendant: {chart.ascendant.sign}")
    print(f"Today's Tithi: {panchang.tithi.name}")
    print(f"Current Dasha: {dasha.current_mahadasha.planet}")

    await client.close()

asyncio.run(main())

AI Chatbot Integration

from vedika import VedikaClient

client = VedikaClient(api_key='YOUR_API_KEY')

def ask_vedika(question, birth_details):
    """Ask Vedika AI about astrology."""

    response = client.chat(
        question=question,
        birth_details=birth_details
    )

    return response.answer

# Example: Natural language astrology query
answer = ask_vedika(
    question="What career paths suit me based on my birth chart?",
    birth_details={
        'datetime': '1990-05-15T14:30:00+05:30',
        'latitude': 28.6139,
        'longitude': 77.2090
    }
)

print(answer)

# Streaming responses
for chunk in client.chat_stream(
    question="Tell me about my upcoming Jupiter Mahadasha",
    birth_details={
        'datetime': '1990-05-15T14:30:00+05:30',
        'latitude': 28.6139,
        'longitude': 77.2090
    }
):
    print(chunk, end='', flush=True)

Flask Integration

from flask import Flask, request, jsonify
from vedika import VedikaClient

app = Flask(__name__)
vedika = VedikaClient(api_key='YOUR_API_KEY')

@app.route('/api/horoscope', methods=['POST'])
def get_horoscope():
    data = request.json

    chart = vedika.birth_chart(
        datetime=data['datetime'],
        latitude=data['latitude'],
        longitude=data['longitude']
    )

    return jsonify({
        'sun_sign': chart.sun.sign,
        'moon_sign': chart.moon.sign,
        'ascendant': chart.ascendant.sign,
        'planets': [
            {'name': p.name, 'sign': p.sign, 'house': p.house}
            for p in chart.planets
        ]
    })

@app.route('/api/match', methods=['POST'])
def match_kundli():
    data = request.json

    match = vedika.match(
        male=data['male'],
        female=data['female']
    )

    return jsonify({
        'score': match.total_score,
        'percentage': match.percentage,
        'recommendation': match.recommendation
    })

if __name__ == '__main__':
    app.run(debug=True)

Pandas Integration

import pandas as pd
from vedika import VedikaClient

client = VedikaClient(api_key='YOUR_API_KEY')

# Convert birth chart to DataFrame
chart = client.birth_chart(
    datetime='1990-05-15T14:30:00+05:30',
    latitude=28.6139,
    longitude=77.2090
)

planets_df = pd.DataFrame([
    {
        'planet': p.name,
        'sign': p.sign,
        'degree': p.degree,
        'house': p.house,
        'nakshatra': p.nakshatra,
        'retrograde': p.retrograde
    }
    for p in chart.planets
])

print(planets_df)

# Analyze multiple charts
birth_data = [
    {'datetime': '1990-05-15T14:30:00', 'lat': 28.61, 'lng': 77.21},
    {'datetime': '1992-08-20T09:15:00', 'lat': 19.07, 'lng': 72.87},
    {'datetime': '1988-12-10T18:45:00', 'lat': 13.08, 'lng': 80.27},
]

charts = [client.birth_chart(d['datetime'], d['lat'], d['lng']) for d in birth_data]

analysis_df = pd.DataFrame([
    {
        'moon_sign': c.moon.sign,
        'sun_sign': c.sun.sign,
        'ascendant': c.ascendant.sign,
        'yoga_count': len(c.yogas)
    }
    for c in charts
])

print(analysis_df.describe())

Start Building with Python

The Vedika Python SDK provides type hints, async support, and comprehensive documentation. Install with pip and start building in minutes.