Overview
Horoscope API returns complete Vedic astrology data — sign-based Rashifal, Janma Kundli, Vimshottari Dasha, D9/Navamsa charts, dosha checks, Ashtakoot matching, and rule-based natal interpretation — for any birth date, time, and place. It serves astrology apps, devotional products, matchmaking flows, and birth-chart dashboards.
Rule of thumb: birth-based endpoints under /v1/... use POST. Public read-only endpoints use GET — including GET /v1/rashifal/:sign/:period, GET /health, and GET /status.
All responses use a standard JSON envelope with data, meta, and optional dev_notes fields. Error responses always carry a machine-readable error and a docs_url link.
All calculations use the Vedic sidereal zodiac with the Lahiri (Chitrapaksha) ayanamsa, whole-sign houses, and true nodes for Rahu/Ketu. Horoscope computation is deterministic and rule-based — natal prediction text is phrase-bank/rule output, not LLM compute.
New to Jyotish terminology? Jump to the Glossary for plain-language definitions of every term used in API responses — rashi, lagna, graha, nakshatra, dasha, and more.
https://horoscope.devdarsha.com/v1/*. Legacy /v1/horoscope/* routes on the gateway remain available for compatibility.Code Examples
All examples below call the Kundli endpoint for a birth on 1990-08-15 at 10:30 in Kolkata. Swap YOUR_API_KEY, the birth details, and city to match your use case.
Get Started in 4 Steps
Go from signup to production in a few minutes.
Sign up free - no credit card needed. Your key is ready instantly.
Use horoscope.devdarsha.com/v1/* for all new work.
Use date, time, and a trusted city or explicit lat/lon/tz.
Read data, integrate into your app, upgrade as you scale.
curl -X POST "https://horoscope.devdarsha.com/v1/kundli" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"1990-08-15","time":"10:30","city":"Kolkata"}'// Use header auth - never put api_key in client-side code
const response = await fetch("https://horoscope.devdarsha.com/v1/kundli", {
method: "POST",
headers: {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
date: "1990-08-15",
time: "10:30",
city: "Kolkata"
})
});
const data = await response.json();
console.log(data.data.lagna.rashi.name); // "Tula"
console.log(data.data.grahas[0].name); // "Surya"
console.log(data.meta.calculation.ayanamsa); // "Lahiri (Chitrapaksha)"import requests
response = requests.post(
"https://horoscope.devdarsha.com/v1/kundli",
headers={"x-api-key": "YOUR_API_KEY"},
json={"date": "1990-08-15", "time": "10:30", "city": "Kolkata"}
)
data = response.json()
print(data["data"]["lagna"]["rashi"]["name"]) # Tula
print(data["data"]["grahas"][0]["name"]) # Surya
print(data["meta"]["calculation"]["ayanamsa"]) # Lahiri (Chitrapaksha)Sample Response (condensed)
Here is a representative slice of a real Kundli response for a birth on 1990-08-15, Kolkata:
{
"data": {
"birth": { "date": "1990-08-15", "time": "10:30", "place": "Kolkata" },
"lagna": { "rashi": { "number": 7, "name": "Tula" }, "nakshatra": { "name": "Swati", "pada": 2 } },
"grahas": [{ "name": "Surya", "rashi": { "name": "Karka" }, "house": 10, "retrograde": false }],
"houses": [{ "house": 1, "rashi": "Tula", "lord": "Shukra" }]
},
"meta": {
"api_version": "v1",
"service": "horoscope",
"data_source": "live",
"calculation": { "zodiac": "sidereal", "ayanamsa": "Lahiri (Chitrapaksha)", "house_system": "whole-sign" }
}
}Attached JSON PayloadExpand to inspect the full computed response
{
"data": {
"birth": {
"date": "1990-08-15",
"time": "10:30",
"place": "Kolkata",
"resolved_timezone": "Asia/Kolkata",
"lat": 22.5726,
"lon": 88.3639
},
"lagna": {
"degree": 192.42,
"rashi": { "number": 7, "name": "Tula" },
"nakshatra": { "name": "Swati", "pada": 2 }
},
"grahas": [
{
"name": "Surya",
"longitude": 118.31,
"rashi": { "number": 4, "name": "Karka" },
"house": 10,
"nakshatra": { "name": "Ashlesha", "pada": 4 },
"retrograde": false
}
],
"houses": [
{ "house": 1, "rashi": "Tula", "lord": "Shukra" }
],
"charts": {
"D1": {
"name": "Rashi",
"positions": [{ "graha": "Surya", "rashi": "Karka", "house": 10 }]
}
}
},
"meta": {
"api_version": "v1",
"service": "horoscope",
"computed_at": "2026-07-01T00:00:00.000Z",
"data_source": "live",
"cache_age_seconds": 0,
"calculation": {
"zodiac": "sidereal",
"ayanamsa": "Lahiri (Chitrapaksha)",
"house_system": "whole-sign",
"node": "true"
}
},
"dev_notes": []
}Authentication
Every compute endpoint requires an API key. Send it in the x-api-key request header and keep requests server-side.
How to get a key
- Sign up — free, no credit card.
- Open the Dashboard and create a key. You can name, rotate, and revoke keys from there.
- Copy the key once — it is shown in full only at creation time. Store it as a server-side secret.
The same lifecycle is also available programmatically — see API Keys below.
Recommended method
Pass your key as an x-api-key request header. This keeps keys out of URLs, browser history, proxy logs, and analytics exports.
POST https://horoscope.devdarsha.com/v1/kundli x-api-key: YOUR_API_KEY
Auth failure reference
| Auth case | Expected response | Fix |
|---|---|---|
| Missing key | 401 missing_api_key | Add x-api-key. |
| Invalid or revoked key | 401 invalid_api_key | Create or rotate a key in the dashboard. |
| Endpoint above active plan | 403 plan_required | Upgrade to Topaz or higher for paid horoscope endpoints. |
| Quota exhausted | 429 quota_exceeded | Wait for reset or upgrade the plan. |
Routes & Base URL
The clean Horoscope host is the preferred integration surface for new clients. The legacy gateway route remains documented only so existing integrations can migrate without confusion.
https://horoscope.devdarsha.com/v1
| Route family | Use for | Base URL | Example |
|---|---|---|---|
| Preferred clean host | New integrations | https://horoscope.devdarsha.com | https://horoscope.devdarsha.com/v1/kundli |
| Legacy compatibility | Existing gateway clients | https://panchang.devdarsha.com | https://panchang.devdarsha.com/v1/horoscope/kundli |
Docs examples below use the clean host. Replace the path with the legacy route only when supporting an older integration.
Route mapping
| Feature | Preferred route | Legacy route |
|---|---|---|
| Rashifal | GET /v1/rashifal/:sign/:period | GET /v1/horoscope/rashifal/:sign/:period |
| Kundli | POST /v1/kundli | POST /v1/horoscope/kundli |
| Dasha | POST /v1/dasha | POST /v1/horoscope/dasha |
| Divisional chart | POST /v1/divisional/:varga | POST /v1/horoscope/divisional/:varga |
| Doshas | POST /v1/doshas | POST /v1/horoscope/doshas |
| Matching | POST /v1/matching | POST /v1/horoscope/matching |
| Natal prediction | POST /v1/predict/natal | POST /v1/horoscope/predict/natal |
| Full forecast | POST /v1/forecast/full | POST /v1/horoscope/forecast/full |
Quick Start
For all /v1/... endpoints, send a JSON body with your request fields and authenticate using x-api-key. Start with Kundli because it verifies birth input, timezone resolution, chart computation, and the response envelope in one call.
Use a trusted city
The canonical request when the birthplace exists in the city directory.
curl -X POST "https://horoscope.devdarsha.com/v1/kundli" \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"1990-08-15","time":"10:30","city":"Kolkata"}'Use exact coordinates
Best when the birthplace is outside the city directory. Requires an explicit IANA timezone.
curl -X POST "https://horoscope.devdarsha.com/v1/kundli" \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"1990-08-15","time":"10:30","lat":22.5726,"lon":88.3639,"tz":"Asia/Kolkata"}'Plans & Feature Gates
Horoscope API uses a separate public plan ladder: Free, Topaz, Ruby, Diamond, Eclipse, Zenith, and Infinity. Free covers basic testing. Topaz is the paid endpoint threshold. Higher tiers increase usage, support, SLA, and commercial terms without changing the v1 path shape. Plan entitlements are product-isolated. Full pricing lives on pricing.
Access gates
- Free:
/rashifaland/kundlionly. Free endpoints still require an API key. - Topaz and above: all v1 horoscope endpoints — Dasha, D9, doshas, matching, and natal prediction.
- Ruby / Diamond / Eclipse / Zenith / Infinity: same endpoint set as Topaz with higher quota, rate limits, support, and SLA.
Endpoint access
| Plan | Endpoint access | Typical use | Notes |
|---|---|---|---|
| Free | /v1/rashifal/:sign/:period/v1/kundli | Testing, demos, prototype charts | Free endpoints still require an API key. |
| Topaz+ | All v1 horoscope endpoints | Paid apps, matchmaking, prediction flows | Required for Dasha, D9, doshas, matching, and natal prediction. |
| Ruby / Diamond / Eclipse / Zenith / Infinity | Same v1 endpoint set as Topaz | Production scale and enterprise use | Higher quota, rate limits, support, SLA, and contract options. |
Quota cost per call
GET /v1/rashifal/:sign/:period— 1 request.POST /v1/kundli— 1 request.POST /v1/dasha— 1 request unless expanded levels are billed separately in the active plan.POST /v1/divisional/:varga,/v1/doshas,/v1/matching, and/v1/predict/natal— 1 request each.GET /healthandGET /status— no quota cost.
The actual charge is echoed in X-Quota-Cost. If you call an endpoint that is not on your plan, the response is 403 plan_required. See Error Codes.
Signup
Create a new DevDarsha account programmatically. Returns an account record and a first API key. No authentication required.
Most users will sign up through the website signup form instead — this endpoint is for partners and SDKs that provision accounts on a user's behalf.
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Required | Valid email address. Becomes the account login. |
password | string | Required | Minimum 8 characters. |
name | string | Optional | Display name shown in dashboard and invoices. |
plan | string | Optional | free (default), topaz, ruby, diamond, and higher tiers. |
Example Request
curl -X POST "https://panchang.devdarsha.com/v1/signup" \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"a-strong-password","plan":"free"}'Response
{
"data": {
"account": { "id": "acc_...", "email": "[email protected]", "plan": "free" },
"api_key": "sk_live_..."
},
"meta": { "version": "v1", "computed_at": "2026-07-01T10:00:00Z" }
}The full api_key is returned only once at signup. After this, the dashboard shows a masked preview. If you lose it, create a new key and revoke the old one.
API Key Management
List, create, rotate, and revoke API keys for your account. All key endpoints require an existing API key with admin scope (your first key has admin scope by default). You can also manage keys from the Dashboard.
Operations
| Operation | Method & path | Description |
|---|---|---|
| Create | POST /v1/keys | Create a new key with an optional name and scope. |
| List | POST /v1/keys/list | List your keys (masked previews only — never the full secret). |
| Rotate | POST /v1/keys/rotate | Issue a replacement key for an existing key id. Old key keeps working for 24 h. |
| Revoke | POST /v1/keys/revoke | Permanently invalidate a key. Cannot be undone. |
Create a key
curl -X POST "https://panchang.devdarsha.com/v1/keys" \
-H "x-api-key: YOUR_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"production-server","scope":"read"}'Response (create / rotate)
{
"data": {
"key_id": "key_abc123",
"api_key": "sk_live_...",
"name": "production-server",
"scope": "read",
"created_at": "2026-07-01T10:00:00Z"
},
"meta": { "version": "v1" }
}The api_key field is returned only on create and rotate. List operations show a masked preview such as sk_live_...wXyZ. Treat keys like passwords.
Usage
Returns the current billing period's usage and remaining quota for the authenticated key. Useful for surfacing a quota meter in your own dashboard or alerting before you run out.
Example Request
curl "https://horoscope.devdarsha.com/v1/usage" \ -H "x-api-key: YOUR_API_KEY"
Response
{
"data": {
"plan": "topaz",
"period_start": "2026-07-01T00:00:00Z",
"period_end": "2026-08-01T00:00:00Z",
"calls_used": 1250,
"calls_included": 10000,
"calls_remaining": 8750
},
"meta": { "version": "v1", "computed_at": "2026-07-02T10:00:00Z" }
}Rashifal
Returns sign-based Rashifal for a rashi and period. This endpoint does not require birth details. Not familiar with these terms? See the Glossary.
Path parameters
| Parameter | Allowed values | Description |
|---|---|---|
sign | See Signs & Periods | Use stable rashi slugs such as mesha, vrishabha, mithuna. |
period | daily, weekly, monthly | Forecast duration. |
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
lang | string | Optional | Display language. Default en. |
date | string | Optional | Anchor date in YYYY-MM-DD. If omitted, current date in the service timezone is used. |
Example Request
curl -X GET "https://horoscope.devdarsha.com/v1/rashifal/mesha/daily?lang=en" \ -H "x-api-key: YOUR_API_KEY"
Kundli
Returns a basic Janma Kundli / D1 chart with lagna, graha positions, rashi, house, nakshatra, and pada fields. This is the recommended first integration test.
Request Body (JSON)
Uses the common Birth Input object.
curl -X POST "https://horoscope.devdarsha.com/v1/kundli" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"1990-08-15","time":"10:30","city":"Kolkata"}'Response Fields
| Field | Description |
|---|---|
birth | Normalized birth input, resolved location, timezone, and coordinates. |
lagna | Ascendant degree, rashi, nakshatra, and pada. |
grahas | Planetary positions with longitude, rashi, house, nakshatra, pada, and retrograde flag where applicable. |
houses | Whole-sign house mapping from lagna. |
charts.D1 | Rashi chart positions suitable for rendering a North, South, or East Indian chart UI. |
Dasha Topaz+
Returns Vimshottari Dasha periods computed from the natal Moon. Use this when your product needs current Maha Dasha, Antardasha, and timeline context.
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
| Birth fields | object | Required | Use the common Birth Input. |
levels | integer | Optional | Dasha depth. Use 1 for Maha Dasha, 2 for Antardasha. Higher expansion may be plan-limited. |
from | string | Optional | Start date for filtering the returned timeline. |
to | string | Optional | End date for filtering the returned timeline. |
Example Request
curl -X POST "https://horoscope.devdarsha.com/v1/dasha" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"1990-08-15","time":"10:30","city":"Kolkata","levels":2}'Divisional Charts Topaz+
Returns a divisional chart for the requested varga. v1 supports D1 and D9. Use D9 for Navamsa workflows.
Path parameters
| Parameter | Allowed values | Description |
|---|---|---|
varga | D1, D9 | Divisional chart code. Unsupported vargas return 400 unsupported_varga. |
Example Request
curl -X POST "https://horoscope.devdarsha.com/v1/divisional/D9" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"1990-08-15","time":"10:30","city":"Kolkata"}'Response Fields
| Field | Description |
|---|---|
varga | Requested divisional code, e.g. D9. |
name | Human-readable chart name, e.g. Navamsa. |
lagna | Divisional ascendant. |
positions | Planetary positions in the requested divisional chart. |
Doshas Topaz+
Returns deterministic dosha checks for common Jyotish conditions. Treat the output as an informational calculation layer, not as a prediction of specific outcomes or remedies.
Example Request
curl -X POST "https://horoscope.devdarsha.com/v1/doshas" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"1990-08-15","time":"10:30","city":"Kolkata"}'Response Fields
| Field | Description |
|---|---|
manglik | Mangal placement check with severity and supporting houses. |
kaal_sarp | Rahu-Ketu axis pattern check. |
sade_sati | Saturn transit relationship to natal Moon where transit context is available. |
pitra | Rule-based Pitra dosha indicator with contributing factors. |
summary | Machine-readable summary and display-safe explanation. |
Matching Topaz+
Returns Ashtakoot / Gun Milan compatibility scoring between two birth profiles. Use boy and girl objects for compatibility with common North Indian matching terminology; applications may relabel the result in their own UI.
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
boy | object | Required | Birth Input object for first profile. |
girl | object | Required | Birth Input object for second profile. |
include_dosha_summary | boolean | Optional | When available on plan, includes high-level dosha compatibility notes. |
Example Request
curl -X POST "https://horoscope.devdarsha.com/v1/matching" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"boy":{"date":"1990-08-15","time":"10:30","city":"Kolkata"},"girl":{"date":"1992-03-21","time":"14:05","city":"Mumbai"}}'Response Fields
{
"data": {
"score": { "total": 26, "max": 36, "percent": 72.22 },
"kootas": [
{ "name": "Varna", "score": 1, "max": 1, "status": "matched" },
{ "name": "Vashya", "score": 2, "max": 2, "status": "matched" }
],
"verdict": "compatible",
"notes": ["..."]
}
}Natal Prediction Topaz+
Returns deterministic natal interpretation generated from chart factors and a phrase-bank/rule system. It is not LLM output and should not be presented as a fixed prediction of future events.
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
| Birth fields | object | Required | Use the common Birth Input. |
sections | array | Optional | Subset of interpretation sections to return, e.g. career, relationship, health, personality. |
lang | string | Optional | Display language. Default en. |
Example Request
curl -X POST "https://horoscope.devdarsha.com/v1/predict/natal" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"1990-08-15","time":"10:30","city":"Kolkata","lang":"en"}'Full Forecast Topaz+
Returns a deterministic multi-signal forecast that fuses the D1 and D9 charts, the active mahā/antar daśā, doshas, Sade Sati and gochar (transits) into per-domain scores with phrase-bank text. It is computed from chart factors and a rule system — not LLM output.
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
| Birth fields | object | Required | Use the common Birth Input. |
as_of | string | Optional | Date (YYYY-MM-DD, resolved to noon in the birth timezone) or a full ISO date-time. Default: now. |
lang | string | Optional | Display language: en (default) or hi. |
Example Request
curl -X POST "https://horoscope.devdarsha.com/v1/forecast/full" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"1990-08-15","time":"10:30","city":"Kolkata","as_of":"2026-07-03","lang":"en"}'as_of (neither YYYY-MM-DD nor an ISO date-time) returns 400 invalid_as_of. Output is deterministic for the same birth input and as_of.Health Check
Use this endpoint for uptime monitors and deployment smoke tests. No authentication required and no quota cost.
{ "ok": true, "service": "horoscope", "status": "healthy" }Status
Status returns service availability and degraded-mode information for dashboards and support tooling. The public marketing status is Live.
{
"data": {
"service": "horoscope",
"status": "operational",
"degraded": false,
"components": [
{ "name": "gateway", "status": "operational" },
{ "name": "horoscope-engine", "status": "operational" },
{ "name": "cache", "status": "operational" }
]
},
"meta": { "api_version": "v1" }
}Feedback Endpoint
Submit feedback about the API. Does not require authentication.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Required | Your name |
email | string | Required | Your email |
plan | string | Required | free | topaz | ruby | diamond | none |
message | string | Required | Feedback text (10–2000 chars) |
Contact
Send a sales, partnership, or support enquiry. Mirrors the contact form on the website. No authentication required. Submissions are rate-limited per IP and per email.
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Required | Your name (2–120 chars). |
email | string | Required | Reply-to email. |
subject | string | Optional | Short topic line. |
message | string | Required | Body of the enquiry (10–4000 chars). |
topic | string | Optional | sales, support, partnership, or other. |
Responds with 202 Accepted on success. Replies usually arrive within 1 business day at the email you supplied.
Billing & Webhooks
Most users will manage subscriptions, invoices, and payment methods from the Dashboard. The endpoints below let you do the same programmatically and let payment providers notify DevDarsha when something changes.
Operations
| Operation | Method & path | Description |
|---|---|---|
| Available plans | GET /v1/billing/plans?product=horoscope | Horoscope plans with prices, currency, and per-cycle availability. |
| Create order | POST /v1/billing/razorpay/order | One-time Razorpay order (pass "product":"horoscope"). Returns razorpay_order_id + amount. |
| Verify payment | POST /v1/billing/razorpay/verify | Confirm a completed Razorpay payment and receive the upgraded API key. |
| Create subscription | POST /v1/billing/razorpay/subscription | Start a recurring Horoscope subscription. Returns the subscription id + short_url. |
| Overview | GET /v1/billing/overview?product=horoscope | Current plan, payment state, renewal date, cycle, currency, and history. |
| Receipts | GET /v1/billing/invoices?product=horoscope | Product-scoped payment receipts. See the GST note in the Panchang docs. |
| Change / cancel | POST /v1/billing/subscription/change · /subscription/cancel | Upgrade/downgrade, or stop auto-renewal (access kept to period end). |
| Webhooks | POST /v1/billing/razorpay/webhook | Receives Razorpay events — see below. |
All operations except the webhook require an authenticated API key. An unknown product returns 400 invalid_product.
Webhook events
Configure the webhook in your Razorpay dashboard to point at /v1/billing/razorpay/webhook. DevDarsha verifies the X-Razorpay-Signature header before trusting the body. Events are at-least-once and handled idempotently. A Horoscope refund downgrades only the Horoscope entitlement.
| Event | When |
|---|---|
payment.captured | A one-time payment was captured; the plan upgrade is applied. |
subscription.authenticated | A subscription mandate was authorized. |
subscription.charged | A recurring charge succeeded; entitlement is extended. |
subscription.halted / subscription.cancelled | Retries exhausted, or the subscription was cancelled. |
refund.created / refund.processed | A refund was issued; the refunded product is downgraded. |
Birth Input
Birth-based endpoints require date and time, plus location. The API accepts a trusted place lookup or explicit coordinates with an explicit timezone. Timezone is never guessed from bare coordinates in production integrations.
| Field | Type | Required | Description |
|---|---|---|---|
date | string | Required | Birth date in YYYY-MM-DD. |
time | string | Required | Birth time in 24-hour HH:mm or HH:mm:ss. Use local civil time at birthplace. |
city / place / city_id | string | Required unless coordinates used | Trusted city lookup. Use city_id when you need deterministic lookup across requests. |
lat | number | Required with lon + tz | Latitude in decimal degrees. South is negative. |
lon | number | Required with lat + tz | Longitude in decimal degrees. West is negative. |
tz | string | Required with coordinates | IANA timezone such as Asia/Kolkata. Avoid abbreviations like IST. |
lang | string | Optional | Language code for display text. Default is en. |
City lookup input
Use a trusted city name when the birthplace is in the directory.
{ "date": "1990-08-15", "time": "10:30", "city": "Kolkata" }Coordinate input
Use decimal-degree coordinates plus an explicit IANA timezone.
{ "date": "1990-08-15", "time": "10:30", "lat": 22.5726, "lon": 88.3639, "tz": "Asia/Kolkata" }Response Envelope
Successful responses use a standard JSON envelope. Clients should read from data and use meta for diagnostics, caching, and support.
| Field | Type | Description |
|---|---|---|
data | object | Endpoint-specific result. |
meta.api_version | string | API version. Current version is v1. |
meta.service | string | horoscope. |
meta.computed_at | string | ISO timestamp when response was generated. |
meta.data_source | string | live, cache, or fallback. |
meta.cache_age_seconds | number | Age of cached result. Zero for fresh compute. |
meta.calculation | object | Calculation conventions such as zodiac, ayanamsa, house system, and node type. |
dev_notes | array | Optional developer notes, warnings, deprecation notices, or degraded-mode details. |
Error Codes
Error responses always include a machine-readable error, human-readable message, and docs_url.
{
"error": "plan_required",
"message": "This Horoscope API endpoint requires a paid plan.",
"docs_url": "https://platform.devdarsha.com/horoscope-documentation#errors"
}| HTTP | error | Meaning | Fix |
|---|---|---|---|
| 400 | invalid_birth_data | Missing or malformed date/time/location. | Validate against the Birth Input rules. |
| 400 | invalid_date | Date is malformed or outside supported range. | Use YYYY-MM-DD. |
| 400 | invalid_timezone | Timezone is missing or not an IANA timezone. | Use values such as Asia/Kolkata. |
| 400 | unknown_place | City/place lookup failed. | Use city_id or explicit lat/lon/tz. |
| 400 | invalid_sign | Rashifal sign slug is not supported. | Use stable rashi slugs from the signs table. |
| 400 | invalid_period | Rashifal period is not supported. | Use daily, weekly, or monthly. |
| 400 | unsupported_varga | Requested divisional chart is outside v1 scope. | Use D1 or D9. |
| 401 | missing_api_key | No API key supplied. | Add x-api-key. |
| 401 | invalid_api_key | Key is invalid, expired, or revoked. | Rotate the key. |
| 403 | plan_required | Endpoint is not available on active plan. | Upgrade to Topaz or higher. |
| 429 | rate_limited | Per-minute limit reached. | Back off using Retry-After. |
| 429 | quota_exceeded | Billing-period quota exhausted. | Wait for reset or upgrade. |
| 500 | internal_error | Unexpected server error. | Retry safely and include X-Request-ID in support. |
| 503 | service_unavailable | Engine or dependency unavailable. | Retry with exponential backoff. |
Signs & Periods
For stable integrations, use Sanskrit rashi slugs. Display names can be translated in your UI.
| Slug | Sanskrit/Hindi name | English equivalent |
|---|---|---|
mesha | Mesha | Aries |
vrishabha | Vrishabha | Taurus |
mithuna | Mithuna | Gemini |
karka | Karka | Cancer |
simha | Simha | Leo |
kanya | Kanya | Virgo |
tula | Tula | Libra |
vrischika | Vrischika | Scorpio |
dhanu | Dhanu | Sagittarius |
makara | Makara | Capricorn |
kumbha | Kumbha | Aquarius |
meena | Meena | Pisces |
Localization
Use lang for display text where the endpoint supports localized output. Numeric positions, dates, rashi IDs, and machine-readable keys remain stable across languages.
| Field type | Localization behavior |
|---|---|
| Machine keys | Stable English snake_case, never translated. |
| Display names | May be localized, e.g. rashi, nakshatra, graha display labels. |
| Interpretation text | Localized where supported by account and endpoint. |
| Dates/times | Returned in documented formats. Do not infer locale-specific parsing from display text. |
Calculation Conventions
- Vedic sidereal zodiac with Lahiri / Chitrapaksha ayanamsa.
- Whole-sign houses for chart house mapping.
- True nodes for Rahu/Ketu unless a future version explicitly documents otherwise.
- Divisional chart v1 scope is
D1andD9. - Vimshottari Dasha is derived from the natal Moon nakshatra.
- Horoscope computation is deterministic and rule-based.
- Natal prediction text is deterministic phrase-bank/rule output, not LLM compute.
Versioning & Sunset Policy
The current Horoscope API version is v1. All routes are prefixed /v1/. We use URI versioning — breaking changes use a new prefix such as /v2/, never a header toggle. Legacy /v1/horoscope/* routes remain compatibility routes, not the preferred route for new integrations.
- Current:
https://horoscope.devdarsha.com/v1/*. - Legacy-compatible:
https://panchang.devdarsha.com/v1/horoscope/*. - Deprecation: Announce migration guidance before removing compatibility routes.
- Client rule: key application logic off stable fields, not prose text.
Rate Limits
Rate limits are enforced per API key and plan. Exact limits are displayed in the dashboard and echoed by rate-limit headers.
| Plan family | Access | Rate-limit behavior |
|---|---|---|
| Free | Rashifal + Kundli | Strict test-tier limit. No overage. |
| Topaz | All v1 endpoints | Production starter limit. |
| Ruby / Diamond / Eclipse / Zenith / Infinity | All v1 endpoints | Higher limits, support, SLA, and commercial terms. |
On 429, the response includes Retry-After. Do not retry immediately in a tight loop. To check live consumption from your app, call GET /v1/usage.
Response Headers
| Header | Description |
|---|---|
X-Request-ID | Unique request id. Include this in support tickets and logs. |
X-Quota-Cost | Number of quota units charged for the call. |
X-Data-Source | live, cache, or fallback. |
X-Cache-Age | Cache age in seconds. |
X-RateLimit-Limit | Per-minute request limit. |
X-RateLimit-Remaining | Requests remaining in the active rate window. |
X-RateLimit-Reset | Unix timestamp when the active window resets. |
Retry-After | Seconds to wait before retrying after 429. |
X-Degraded | true when serving from degraded or fallback mode. |
X-Degraded-Reason | Short degraded-mode reason slug. |
Cache-Control | Authenticated responses are private and not stored by shared caches. |
Horoscope Glossary
A quick reference for the Jyotish terms used throughout this API and its responses.
| Term | Meaning |
|---|---|
| Rashi | Sidereal zodiac sign. Used for Moon sign, Sun sign, lagna sign, and Rashifal signs. |
| Lagna | Ascendant; the rising sign at birth. It anchors house calculation. |
| Graha | Planetary factor used in Jyotish, including Surya, Chandra, Mangal, Budha, Guru, Shukra, Shani, Rahu, and Ketu. |
| Nakshatra | One of 27 lunar mansions. The Moon's nakshatra is central to Dasha calculation. |
| Pada | Quarter division of a nakshatra. |
| Bhava / House | Chart house representing a life area. v1 uses whole-sign houses. |
| D1 / Rashi chart | Main natal chart. |
| D9 / Navamsa | Divisional chart often used for deeper strength and marriage analysis. |
| Dasha | Planetary period system. v1 documents Vimshottari Dasha. |
| Maha Dasha | Major Dasha period. |
| Antardasha | Sub-period inside a Maha Dasha. |
| Manglik | Rule-based check involving Mars placement in specific houses. |
| Kaal Sarp | Pattern check involving planetary placement relative to Rahu-Ketu axis. |
| Sade Sati | Saturn transit period around natal Moon sign. |
| Ashtakoot | Eight-factor Gun Milan compatibility scoring system. |