Free Vedic astrology API
Four JSON endpoints for Panchang, Choghadiya, Rahu Kaal, daily horoscopes, 36-guna Kundli matching and dosha checks. No API key. No signup. No cost. Charts are computed with the Swiss Ephemeris using the Lahiri ayanamsa — the same engine behind the Kundli matching tool and the city panchang pages on this site.
These are the endpoints that power this website. They are public because the website is public, and documented because an undocumented endpoint is useless to anyone else. Use them in your own site, app, bot or weekend project.
Base URL
https://kundlidost-api-833851802975.asia-south1.run.app
This address is provisional. It is an auto-generated
Cloud Run hostname, and it is tied to where the service happens to run today. A permanent
api.kundlidost.in is being set up and will replace it on this page. Until then,
keep the base URL in a single constant in your code rather than scattered through it, so the
switch is a one-line change. We will not remove this host without saying so here first.
All responses are application/json. CORS is restricted to this site's origins,
so call these from a server, a script, or a native app rather than from browser JavaScript on
another domain.
Panchang, Choghadiya & Rahu Kaal
GET /api/panchang/public
Tithi, paksha, nakshatra, yoga, karana, sunrise, sunset, Rahu Kaal, Yamaganda, Gulika, Abhijit, and the full 16-slot Choghadiya table (8 day + 8 night) for any coordinates on Earth.
Parameters
| Name | Type | Required | Notes |
|---|---|---|---|
lat | number | yes | −90 to 90 |
lng | number | yes | −180 to 180 |
date | string | no | YYYY-MM-DD. Defaults to today in IST. |
Example
curl "https://kundlidost-api-833851802975.asia-south1.run.app/api/panchang/public?lat=28.6139&lng=77.2090&date=2026-09-09"
{
"date": "2026-09-09",
"weekday": 3,
"tithiIndex": 27,
"tithiNumber": 13,
"paksha": "krishna",
"nakshatraIndex": 8,
"nakshatra": "Ashlesha",
"yogaIndex": 19,
"karanaIndex": 5,
"sunrise": "06:02",
"sunset": "18:33",
"rahuKaal": { "start": "12:18", "end": "13:52" },
"yamaganda": { "start": "07:36", "end": "09:10" },
"gulika": { "start": "10:44", "end": "12:18" },
"abhijit": { "start": "11:53", "end": "12:43" },
"muhurat": {
"date": "2026-09-09",
"sunrise": "06:02",
"sunset": "18:33",
"day": [
{ "name": "labh", "quality": "good", "start": "06:02", "end": "07:36" },
{ "name": "amrit", "quality": "good", "start": "07:36", "end": "09:10" },
{ "name": "kaal", "quality": "bad", "start": "09:10", "end": "10:44" },
{ "name": "shubh", "quality": "good", "start": "10:44", "end": "12:18" },
{ "name": "rog", "quality": "bad", "start": "12:18", "end": "13:52" },
{ "name": "udveg", "quality": "bad", "start": "13:52", "end": "15:26" },
{ "name": "char", "quality": "neutral", "start": "15:26", "end": "16:59" },
{ "name": "labh", "quality": "good", "start": "16:59", "end": "18:33" }
],
"night": [ "...8 more slots, sunset to next sunrise..." ],
"abhijit": { "start": "11:53", "end": "12:43" }
}
}
Every time is IST (UTC+5:30), as HH:mm on a
24-hour clock — not local time at the coordinates, and date is an IST
calendar date too. The instants are correct for any point on Earth, but they are expressed on
an Indian clock: ask for London on 21 June and sunrise comes back as 09:12, which
is 04:42 BST. Convert on your side if your users are not in India. A slot whose
end is smaller than its start has crossed midnight. Cached for one
hour.
Daily horoscope
GET /api/horoscope/public/{rashiIndex}
Today's reading for one moon sign, in English or Hindi, with an upay, three ratings, and a lucky number and colour. Regenerated once a day and served from cache, so every caller gets the same text for the same day.
Parameters
| Name | Type | Required | Notes |
|---|---|---|---|
rashiIndex | integer | yes | Path segment, 0–11. See the sign table. |
lang | string | no | en (default) or hi |
Example
curl "https://kundlidost-api-833851802975.asia-south1.run.app/api/horoscope/public/0?lang=en"
{
"date": "2026-09-09",
"rashiIndex": 0,
"rashi": "Mesha",
"language": "en",
"text": "The energy today calls for focus and steady progress, Mesha. ...",
"upay": "Offer water to the rising Sun to cultivate clarity and inner strength.",
"ratings": { "love": 3, "career": 2, "health": 3 },
"luckyNumber": 9,
"luckyColor": { "key": "silver", "hex": "#C0C4CE" }
}
Ratings are 1–5. text is generated by a language model
from the day's planetary positions, so if you display it, tell your users it is
computer-generated — the terms below ask this of you.
Kundli matching (36 guna)
POST /api/matching/public
Full Ashtakoota compatibility: the eight kootas with points scored and available, the total out of 36, a verdict, and the Nadi, Bhakoot and Mangal dosha flags. Two Swiss Ephemeris charts per call. Nothing is stored — the request body is the only place the birth details exist.
Request body
Two people, boy and girl, each with a name and a
birth object:
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | yes | 1–80 characters. Echoed back, not stored. |
birth.date | string | yes | YYYY-MM-DD |
birth.time | string or null | yes | HH:mm, or null if unknown |
birth.lat | number | yes | −90 to 90 |
birth.lng | number | yes | −180 to 180 |
birth.place | string | no | Label only, max 200 characters |
birth.utcOffsetMinutes | integer | no | −720 to 840. Inferred from the coordinates if omitted. |
Example
curl -X POST "https://kundlidost-api-833851802975.asia-south1.run.app/api/matching/public" \
-H "Content-Type: application/json" \
-d '{
"boy": { "name": "Ravi", "birth": { "date": "1995-04-12", "time": "07:30", "lat": 28.6139, "lng": 77.2090, "place": "Delhi" } },
"girl": { "name": "Meera", "birth": { "date": "1997-11-03", "time": "14:15", "lat": 19.0760, "lng": 72.8777, "place": "Mumbai" } }
}'
{
"total": 24.5,
"max": 36,
"verdict": "average",
"kootas": [
{ "key": "varna", "got": 1, "max": 1 },
{ "key": "vashya", "got": 2, "max": 2 },
{ "key": "tara", "got": 1.5, "max": 3 },
{ "key": "yoni", "got": 3, "max": 4 },
{ "key": "grahaMaitri", "got": 5, "max": 5 },
{ "key": "gana", "got": 6, "max": 6 },
{ "key": "bhakoot", "got": 0, "max": 7 },
{ "key": "nadi", "got": 8, "max": 8 }
],
"nadiDosha": false,
"bhakootDosha": true,
"mangalCompatible": true,
"boy": { "name": "Ravi", "rashi": "Kanya", "nakshatra": "Hasta" },
"girl": { "name": "Meera", "rashi": "Meena", "nakshatra": "Revati" }
}
The numbers above are an illustration of the shape — run the call to
get the real result for those dates. got can be fractional, because Tara koota
awards half points. The eight key values and their maximums are fixed and always
returned in the order shown.
Dosha check
POST /api/doshas/public
Sade Sati, Kaal Sarp and Mangal (Manglik) for one person, with the placement that causes each. Sade Sati depends on where Saturn is today, so unlike the other two it changes over time — the transit sign is returned so you can show why.
Request body
A single birth object, with the same fields as above minus
utcOffsetMinutes:
{ "birth": { "date": "1995-04-12", "time": "07:30", "lat": 28.6139, "lng": 77.2090, "place": "Delhi" } }
Response
{
"sadeSati": {
"active": true,
"phase": "peak",
"dhaiya": false,
"saturnRashiIndex": 11,
"saturnRashi": "Meena",
"moonRashiIndex": 11,
"moonRashi": "Meena"
},
"kaalSarp": { "present": false, "typeIndex": null },
"mangal": { "manglik": true, "houses": [7] },
"moonRashi": "Meena",
"nakshatra": "Revati",
"hadBirthTime": true
}
| Field | Meaning |
|---|---|
sadeSati.phase | rising (Saturn in the 12th from the natal Moon), peak (1st), setting (2nd), or null when inactive |
sadeSati.dhaiya | Kantaka Shani, sometimes called "small panoti" — Saturn in the 4th or 8th from the Moon |
kaalSarp.typeIndex | 0–11 by the house Rahu occupies (Anant through Sheshnag), or null when absent |
mangal.houses | Houses from the lagna where Mars sits and causes the dosha. Empty when not Manglik. |
hadBirthTime | false when you sent time: null. The Mangal test is house-based and shifts with the lagna, so treat the result as approximate. |
The remedy steps are not in this response. They are the part of the product that funds it, and they live in the app.
Sign index
The moon sign index the horoscope endpoint takes, and that every endpoint returns.
| # | Rashi | Western | # | Rashi | Western |
|---|---|---|---|---|---|
| 0 | Mesha | Aries | 6 | Tula | Libra |
| 1 | Vrishabha | Taurus | 7 | Vrishchika | Scorpio |
| 2 | Mithuna | Gemini | 8 | Dhanu | Sagittarius |
| 3 | Karka | Cancer | 9 | Makara | Capricorn |
| 4 | Simha | Leo | 10 | Kumbha | Aquarius |
| 5 | Kanya | Virgo | 11 | Meena | Pisces |
Enumerated values
| Field | Values |
|---|---|
verdict | excellent (total 33 or more), veryGood (25–32.5), average (18–24.5), notRecommended (below 18) |
muhurat[].name | amrit, shubh, labh, char, udveg, kaal, rog |
muhurat[].quality | good, neutral, bad |
paksha | shukla (waxing), krishna (waning) |
weekday | 0 = Sunday, through 6 = Saturday |
Rate limits
Per IP, with standard RateLimit-* response headers, so you can back off before
you are refused.
| Endpoint | Limit | Cached for |
|---|---|---|
GET /api/panchang/public | 60 per minute | 1 hour |
GET /api/horoscope/public/… | unmetered | 30 minutes |
POST /api/matching/public | 20 per minute, shared between the two | 5 minutes |
POST /api/doshas/public | 5 minutes |
The two POST endpoints draw on one budget, not 20 each — they are the expensive calls, one or two full ephemeris solves apiece rather than a cached lookup. If you need more than this, cache on your side: the panchang for a given date and place never changes, and neither does the horoscope for a given day and sign.
Errors
Every error is a JSON object with a single human-readable message:
{ "message": "lat must be a number between -90 and 90." }
| Status | Meaning |
|---|---|
400 | A parameter is missing, malformed, or out of range |
422 | Well-formed, but no chart could be computed from those birth details |
429 | Rate limited. Check RateLimit-Reset and retry after it. |
5xx | Our problem. Retry with backoff; if it persists, tell us. |
Terms of use
- Free, for anything. Personal projects, commercial products, research. No key, no quota application, no invoice.
- Please credit us. A link back to kundlidost.in wherever you show the data. Not legally required, genuinely appreciated, and the reason this page exists.
- Say when text is computer-generated. If you display the horoscope
text, tell your users a machine wrote it. We are strict about this in our own app and we ask the same of you. - Cache, don't hammer. The rate limits are the ceiling, not the target.
- No warranty. Provided as-is. Astrological output is for guidance and reflection — not medical, legal or financial advice — and nothing safety-critical should be built on it.
- This may change. Fields may be added; existing fields will not be renamed or removed without notice on this page. If an endpoint ever has to close, this page will say so before it does.
Questions
Write to support@kundlidost.in. If you build something with this, we would like to see it.
These endpoints power the free tools on this site — try them in a browser first: