Complete endpoint documentation for Vedika API
Get API keyFree sandbox includedPurpose-built for faith-tech applications. All domains share the same authentication, billing, and response format.
/v2/astrology/* /v2/astrology/lalkitab/* /v2/astrology/jaimini/* /v2/astrology/tajaka/* /v2/astrology/kp/* /v2/astrology/dasha/*/v2/western/*/v2/tarot/* /v2/lenormand/* /v2/oracle/*/v2/chinese/* /v2/iching/*/v2/crystals/* /v2/humandesign/* /v2/angel-numbers/* /v2/biorhythm/* /v2/dreams/* /v2/runes/* /v2/palmistry/* /v2/spiritual/* /v2/health/*/v2/matrimony/* /v2/career/* /v2/finance/* /v2/reports/*/v2/content/* /v2/lifestyle/* /v2/calculators/* /v2/widgets/*All endpoints share the same x-api-key authentication, wallet-based billing, and JSON response format. See full pricing per endpoint
Base URL, the auth header, and the one response quirk worth knowing before you integrate.
All requests are served from our India (Mumbai) region:
https://api.vedika.io
All API requests require authentication via API key in the header:
Authorization: Bearer vk_live_your_api_key_here
Get your API key from the Dashboard
A request sent with no API key at all (no Authorization header,
no x-api-key header) intentionally gets a 404-shaped JSON body on
every gated endpoint, including this one:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="Vedika API", docs="https://docs.vedika.io/authentication"
{
"status": "error",
"message": "Not found",
"code": "NOT_FOUND"
}
This is not a routing bug and the endpoint does exist. It is
deliberate anti-enumeration hardening: an unauthenticated caller cannot distinguish "this route
is real but I'm not authorized" from "this route doesn't exist" by comparing response bodies,
which would let an attacker fingerprint private/internal routes for free. The HTTP
status code is always the ground truth - trust the 401, not the
NOT_FOUND string in the body.
Rule of thumb when integrating: check response.status, not
response.body.code, to branch on missing/invalid credentials. A key that is present
but malformed, expired, or revoked gets a distinct 401 body
({"error":"Unauthorized", "message": "..."}) that does describe the actual problem.
The identical-to-404 body only happens when the request carries no credential whatsoever.
Generate complete Vedic birth chart with planetary positions, houses, and yogas
POST /api/v1/chart
{
"dateOfBirth": "1990-01-15",
"timeOfBirth": "14:30",
"placeOfBirth": "Mumbai, India",
"chartType": "D1"
}
{
"success": true,
"data": {
"planets": [...],
"houses": [...],
"yogas": ["Gaja Kesari Yoga", "Budhaditya Yoga"],
"doshas": {
"manglik": false,
"kaal_sarp": false
},
"divisionalCharts": {...}
},
"credits_used": 2
}
Ask any astrology question and get AI-powered analysis with grounded, anti-hallucination accuracy vs generic AI
POST /api/v1/astrology/query
{
"question": "What are my career prospects in 2026?",
"birthDetails": {
"datetime": "1990-01-15T14:30:00",
"latitude": 19.0760,
"longitude": 72.8777,
"timezone": "+05:30"
},
"responseFormat": "json"
}
| Parameter | Type | Required | Description |
|---|---|---|---|
question |
string | Yes | Natural language astrology question |
birthDetails |
object | Yes | Birth date/time and location (datetime, latitude, longitude, timezone) |
responseFormat |
string enum | No | "markdown" (default), "text", or "json". Use "json" to also receive a structuredResponse object with parsed sections |
language |
string | No | ISO 639-1 language code (default: "en"). Supports 30+ languages |
system |
string | No | "vedic" (default), "western", or "kp" |
conversationId |
string | No | For multi-turn conversations, pass the conversation ID from a previous response |
{
"success": true,
"response": "Based on your current Mahadasha...",
"followUpSuggestions": [
"Tell me about my next Antardasha",
"What are my lucky colors this year?"
],
"metadata": {
"model": "Vedika AI",
"processing_time_ms": 2340,
"cost": {"amount": 0.035, "currency": "USD"}
},
"birthChart": {...},
"conversationId": "conv_abc123def456"
}
structuredResponse(only when request used responseFormat=json)Machine-readable breakdown of the markdown answer. Use this for rendering sections individually without markdown parsing:
{
"title": "Career Path in 2026",
"preamble": "Namaste.",
"sections": [
{
"heading": "Current Trends",
"level": 2,
"paragraphs": ["Your Jupiter placement indicates..."],
"bullets": ["Career growth expected", "New opportunities in Q3"],
"numbered": []
}
],
"raw": "## Current Trends\n\nYour Jupiter placement..."
}
Calculate Ashtakoota matching score and detailed compatibility report
POST /api/v1/compatibility
{
"person1": {
"dateOfBirth": "1990-01-15",
"timeOfBirth": "14:30",
"placeOfBirth": "Mumbai, India"
},
"person2": {
"dateOfBirth": "1992-05-20",
"timeOfBirth": "09:15",
"placeOfBirth": "Delhi, India"
}
}
{
"success": true,
"data": {
"totalScore": 28,
"maxScore": 36,
"percentage": 77.8,
"kootaBreakdown": {...},
"manglikAnalysis": {...},
"recommendation": "Highly compatible"
},
"credits_used": 2
}
Verify API availability and server status
GET /api/v1/health
{
"status": "healthy",
"uptime": 1234567,
"version": "1.0.0"
}
Get API version and capabilities information
GET /api/v1/info
{
"name": "Vedika API",
"version": "1.0.0",
"features": ["birth-chart", "ai-query", "compatibility"],
"models": ["Vedika Pro 1.0", "Vedika Standard 2.1", "Vedika Lite 0.9", "Vedika Express 1.5"]
}
| Code | Message | Description |
|---|---|---|
| 400 | Bad Request | Invalid request parameters |
| 401 | Unauthorized | Invalid or missing API key. If no key was sent at all, the body is intentionally identical to a 404 ({"code":"NOT_FOUND"}). This is anti-enumeration hardening, not a routing error. See Authentication above. |
| 402 | Payment Required | Insufficient credits |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Server error (we'll fix it!) |
requests per month
requests per month
Custom SLA