The GrahaNow partner API
Matrimony sites, temples and calendar apps can use the same calculations that power GrahaNow: sidereal (Lahiri) birth charts, Ashtakoota matching, Panchang and auspicious days, calculated by our XALEN engine.
What you get
Birth chart
POST /api/v1/chartNine grahas with sidereal longitude, rashi, nakshatra and pada, lagna, Moon nakshatra and the twelve whole-sign houses.
Matching
POST /api/v1/matchingAshtakoota (Guna Milan) total out of 36, all eight koota scores, dosha indicators and a basic Manglik check for both people.
Panchang
GET /api/v1/panchangTithi, nakshatra, yoga, karana and weekday for any date, time and place.
Auspicious days
GET /api/v1/auspicious-daysUp to 45 days rated from the Panchang at local sunrise, with plain-English reasons and observances.
Authentication and test keys
Send your key in the Authorization header as a Bearer token. Live keys start with nn_live_ and return real calculations. Test keys start with nn_test_ and return deterministic sample data in exactly the same shape, so you can build and test without using live calculations. Every response says which mode it came from in meta.mode.
Your users' data
Birth details you send are used only to calculate the response. We do not store them and we do not log them; usage is metered as counts per key, endpoint and day. You remain responsible for how you collect and present your users' details.
Example requests
Birth chart
curl -X POST https://www.grahanow.com/api/v1/chart \
-H "Authorization: Bearer $NN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"1990-08-15","time":"06:30","timezone":"Asia/Kolkata","latitude":13.0827,"longitude":80.2707}'const response = await fetch("https://www.grahanow.com/api/v1/chart", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.NN_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({"date":"1990-08-15","time":"06:30","timezone":"Asia/Kolkata","latitude":13.0827,"longitude":80.2707})
});
const { data, meta } = await response.json();{
"data": {
"input": {
"date": "1990-08-15",
"time": "06:30",
"timezone": "Asia/Kolkata",
"utcOffset": "UTC+05:30",
"latitude": 13.0827,
"longitude": 80.2707
},
"zodiac": "sidereal",
"ayanamsa": "Lahiri",
"houseSystem": "Whole Sign",
"lagna": {
"longitude": 350.236817,
"rashi": "Meena",
"degreeInRashi": 20.236817,
"nakshatra": "Revati",
"pada": 2
},
"moon": {
"rashi": "Mesha",
"nakshatra": "Ashwini",
"pada": 1
},
"planets": [
{
"graha": "Sun",
"longitude": 69.488184,
"latitude": -0.054087,
"rashi": "Mithuna",
"degreeInRashi": 9.488184,
"nakshatra": "Ardra",
"pada": 1,
"retrograde": false,
"house": 4
},
{
"graha": "Moon",
"longitude": 0.102466,
"latitude": 0.129972,
"rashi": "Mesha",
"degreeInRashi": 0.102466,
"nakshatra": "Ashwini",
"pada": 1,
"retrograde": false,
"house": 2
},
{
"graha": "Mars",
"longitude": 226.664412,
"latitude": 1.536653,
"rashi": "Vrishchika",
"degreeInRashi": 16.664412,
"nakshatra": "Anuradha",
"pada": 4,
"retrograde": false,
"house": 9
},
{
"graha": "Mercury",
"longitude": 21.988604,
"latitude": 1.21063,
"rashi": "Mesha",
"degreeInRashi": 21.988604,
"nakshatra": "Bharani",
"pada": 3,
"retrograde": false,
"house": 2
},
{
"graha": "Jupiter",
"longitude": 311.022935,
"latitude": 2.291389,
"rashi": "Kumbha",
"degreeInRashi": 11.022935,
"nakshatra": "Shatabhisha",
"pada": 2,
"retrograde": false,
"house": 12
},
{
"graha": "Venus",
"longitude": 286.606051,
"latitude": -1.170018,
"rashi": "Makara",
"degreeInRashi": 16.606051,
"nakshatra": "Shravana",
"pada": 2,
"retrograde": false,
"house": 11
},
{
"graha": "Saturn",
"longitude": 66.715562,
"latitude": 0.706801,
"rashi": "Mithuna",
"degreeInRashi": 6.715562,
"nakshatra": "Ardra",
"pada": 1,
"retrograde": false,
"house": 4
},
{
"graha": "Rahu",
"longitude": 100.638662,
"latitude": 0,
"rashi": "Karka",
"degreeInRashi": 10.638662,
"nakshatra": "Pushya",
"pada": 3,
"retrograde": true,
"house": 5
},
{
"graha": "Ketu",
"longitude": 280.638662,
"latitude": 0,
"rashi": "Makara",
"degreeInRashi": 10.638662,
"nakshatra": "Shravana",
"pada": 1,
"retrograde": true,
"house": 11
}
],
"houses": [
{
"house": 1,
"rashi": "Meena",
"grahas": []
},
{
"house": 2,
"rashi": "Mesha",
"grahas": [
"Moon",
"Mercury"
]
},
{
"house": 3,
"rashi": "Vrishabha",
"grahas": []
},
{
"house": 4,
"rashi": "Mithuna",
"grahas": [
"Sun",
"Saturn"
]
},
{
"house": 5,
"rashi": "Karka",
"grahas": [
"Rahu"
]
},
{
"house": 6,
"rashi": "Simha",
"grahas": []
},
{
"house": 7,
"rashi": "Kanya",
"grahas": []
},
{
"house": 8,
"rashi": "Tula",
"grahas": []
},
{
"house": 9,
"rashi": "Vrishchika",
"grahas": [
"Mars"
]
},
{
"house": 10,
"rashi": "Dhanu",
"grahas": []
},
{
"house": 11,
"rashi": "Makara",
"grahas": [
"Venus",
"Ketu"
]
},
{
"house": 12,
"rashi": "Kumbha",
"grahas": [
"Jupiter"
]
}
],
"engine": {
"name": "XALEN",
"version": "sample"
}
},
"meta": {
"apiVersion": "v1",
"requestId": "3f6c1d2e-8a4b-4c1f-9e2d-5b7a6c8d9e0f",
"mode": "test",
"sample": true,
"generatedAt": "2026-11-01T00:30:00.000Z"
}
}Matching
curl -X POST https://www.grahanow.com/api/v1/matching \
-H "Authorization: Bearer $NN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"bride":{"date":"1994-03-12","time":"09:15","timezone":"Asia/Kolkata","latitude":12.9716,"longitude":77.5946},"groom":{"date":"1991-11-02","time":"18:40","timezone":"UTC+05:30","latitude":9.9312,"longitude":76.2673}}'const response = await fetch("https://www.grahanow.com/api/v1/matching", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.NN_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ bride, groom })
});
const { data } = await response.json();
console.log(data.total, "/", data.maxScore);{
"data": {
"input": {
"bride": {
"date": "1994-03-12",
"time": "09:15",
"timezone": "Asia/Kolkata",
"utcOffset": "UTC+05:30",
"latitude": 12.9716,
"longitude": 77.5946
},
"groom": {
"date": "1991-11-02",
"time": "18:40",
"timezone": "UTC+05:30",
"utcOffset": "UTC+05:30",
"latitude": 9.9312,
"longitude": 76.2673
}
},
"method": "Ashtakoota / Guna Milan",
"total": 27,
"maxScore": 36,
"kootas": [
{
"name": "Varna",
"score": 1,
"max": 1,
"detail": "Kumbha (1) vs Makara (2)",
"flags": []
},
{
"name": "Vashya",
"score": 1,
"max": 2,
"detail": "Dwipad vs Jalachar",
"flags": []
},
{
"name": "Tara",
"score": 3,
"max": 3,
"detail": "Groom→Bride: 1; Bride→Groom: 1",
"flags": []
},
{
"name": "Yoni",
"score": 4,
"max": 4,
"detail": "Lion vs Lion",
"flags": []
},
{
"name": "Graha Maitri",
"score": 5,
"max": 5,
"detail": "Saturn↔Saturn: same/same",
"flags": []
},
{
"name": "Gana",
"score": 6,
"max": 6,
"detail": "Rakshasa vs Rakshasa",
"flags": []
},
{
"name": "Bhakoot",
"score": 7,
"max": 7,
"detail": "12/2 relationship",
"flags": []
},
{
"name": "Nadi",
"score": 0,
"max": 8,
"detail": "Madhya vs Madhya",
"flags": [
"Nadi Dosha indicator",
"Different Moon signs",
"Same nakshatra, different pada"
]
}
],
"bride": {
"moonRashi": "Kumbha",
"nakshatra": "Dhanishtha",
"pada": 4,
"degreeInRashi": 5.385954,
"manglik": {
"manglik": true,
"fromLagna": true,
"fromMoon": false,
"marsHouseFromLagna": 8,
"marsHouseFromMoon": 11
}
},
"groom": {
"moonRashi": "Makara",
"nakshatra": "Dhanishtha",
"pada": 1,
"degreeInRashi": 23.671327,
"manglik": {
"manglik": false,
"fromLagna": false,
"fromMoon": true,
"marsHouseFromLagna": 5,
"marsHouseFromMoon": 2
}
},
"manglikMethod": "Mars in house 1, 2, 4, 7, 8 or 12 from the Lagna (whole sign); Moon-based check reported separately; cancellations not assessed",
"note": "This is a traditional Moon-based matching calculation. It is not a scientific measure of relationship quality and should not be treated as a decision or medical prediction."
},
"meta": {
"apiVersion": "v1",
"requestId": "3f6c1d2e-8a4b-4c1f-9e2d-5b7a6c8d9e0f",
"mode": "test",
"sample": true,
"generatedAt": "2026-11-01T00:30:00.000Z"
}
}Panchang
curl "https://www.grahanow.com/api/v1/panchang?date=2026-11-01&time=06%3A00&lat=28.6139&lon=77.2090&tz=Asia%2FKolkata" \ -H "Authorization: Bearer $NN_API_KEY"
const params = new URLSearchParams({"date":"2026-11-01","time":"06:00","lat":"28.6139","lon":"77.2090","tz":"Asia/Kolkata"});
const response = await fetch(`https://www.grahanow.com/api/v1/panchang?${params}`, {
headers: { Authorization: `Bearer ${process.env.NN_API_KEY}` }
});{
"data": {
"input": {
"date": "2026-11-01",
"time": "06:00",
"timezone": "Asia/Kolkata",
"utcOffset": "UTC+05:30",
"latitude": 28.6139,
"longitude": 77.209
},
"tithi": {
"number": 3,
"paksha": "Shukla",
"name": "Tritiya",
"display": "Shukla Tritiya"
},
"nakshatra": {
"index": 9,
"name": "Magha",
"display": "Magha"
},
"yoga": {
"number": 5,
"name": "Shobhana",
"display": "Shobhana"
},
"karana": {
"name": "Gara",
"display": "Gara"
},
"vara": {
"weekday": 0,
"name": "Sunday",
"display": "Sunday"
}
},
"meta": {
"apiVersion": "v1",
"requestId": "3f6c1d2e-8a4b-4c1f-9e2d-5b7a6c8d9e0f",
"mode": "test",
"sample": true,
"generatedAt": "2026-11-01T00:30:00.000Z"
}
}Auspicious days
curl "https://www.grahanow.com/api/v1/auspicious-days?lat=19.0760&lon=72.8777&tz=Asia%2FKolkata&days=3&start=2026-11-01" \ -H "Authorization: Bearer $NN_API_KEY"
const params = new URLSearchParams({"lat":"19.0760","lon":"72.8777","tz":"Asia/Kolkata","days":"3","start":"2026-11-01"});
const response = await fetch(`https://www.grahanow.com/api/v1/auspicious-days?${params}`, {
headers: { Authorization: `Bearer ${process.env.NN_API_KEY}` }
});
if (response.status === 429) console.log("retry after", response.headers.get("Retry-After"), "s");{
"data": {
"place": {
"latitude": 19.08,
"longitude": 72.88,
"timezone": "Asia/Kolkata"
},
"from": "2026-11-01",
"count": 3,
"days": [
{
"date": "2026-11-01",
"weekday": 0,
"weekdayName": "Sunday",
"sunrise": "06:39",
"tithi": {
"number": 3,
"paksha": "Shukla",
"name": "Tritiya",
"display": "Shukla Tritiya"
},
"nakshatra": "Magha",
"yoga": "Shobhana",
"rating": "ordinary",
"ratingLabel": "Ordinary",
"reasonCode": "ordinaryGoodDay",
"reason": "The Moon is in Magha, which is not among the stars chosen for beginnings. Fine for routine work.",
"observances": []
},
{
"date": "2026-11-02",
"weekday": 1,
"weekdayName": "Monday",
"sunrise": "06:39",
"tithi": {
"number": 27,
"paksha": "Krishna",
"name": "Dwadashi",
"display": "Krishna Dwadashi"
},
"nakshatra": "Ashwini",
"yoga": "Shobhana",
"rating": "high",
"ratingLabel": "Highly favourable",
"reasonCode": "high",
"reason": "The Moon is in Ashwini, a star traditionally chosen for beginnings, and Monday is a good weekday.",
"observances": []
},
{
"date": "2026-11-03",
"weekday": 2,
"weekdayName": "Tuesday",
"sunrise": "06:39",
"tithi": {
"number": 23,
"paksha": "Krishna",
"name": "Ashtami",
"display": "Krishna Ashtami"
},
"nakshatra": "Uttara Phalguni",
"yoga": "Ayushman",
"rating": "good",
"ratingLabel": "Favourable",
"reasonCode": "goodWeakDay",
"reason": "The Moon is in Uttara Phalguni, a good star for beginnings, though Tuesday is traditionally less favoured.",
"observances": []
}
]
},
"meta": {
"apiVersion": "v1",
"requestId": "3f6c1d2e-8a4b-4c1f-9e2d-5b7a6c8d9e0f",
"mode": "test",
"sample": true,
"generatedAt": "2026-11-01T00:30:00.000Z"
}
}Plans and rate limits
Each key has a per-minute limit; the monthly quota is shared by all keys of your account in the same mode (live or test). Every response carries X-RateLimit-* and X-Quota-* headers. When a limit is reached you get HTTP 429 with a Retry-After header.
| Plan | Calls per month | Calls per minute | Price |
|---|---|---|---|
| Free trial | 500 | 10 | On request |
| Starter | 10,000 | 60 | On request |
| Growth | 1,00,000 | 300 | On request |
| Enterprise | 10,00,000 | 1200 | On request |
Errors
Errors are JSON with a stable code. Messages are for people and may change; build on the code.
| Code | HTTP | Meaning |
|---|---|---|
missing_api_key | 401 | Send your API key as `Authorization: Bearer nn_live_…` or `nn_test_…`. |
invalid_api_key | 401 | The API key is not valid. |
api_key_revoked | 401 | The API key has been revoked or has expired. |
partner_suspended | 403 | This partner account is suspended. Contact GrahaNow. |
rate_limited | 429 | Per-minute rate limit reached. Retry after the time in the Retry-After header. |
quota_exceeded | 429 | Monthly quota reached for this plan. It resets at the start of next month (UTC). |
invalid_json | 400 | The request body must be a JSON object. |
invalid_request | 400 | The request is not valid. |
payload_too_large | 413 | The request body is larger than 16 KB. |
calculation_unavailable | 502 | The calculation could not be completed. The call was not counted; please retry. |
service_unavailable | 503 | The API is temporarily unavailable. Please retry shortly. |
internal_error | 500 | Something went wrong on our side. Please retry. |
OpenAPI description
The full contract is available as OpenAPI 3.1 JSON. Download openapi.json
Results are traditional Jyotish calculations. They are not scientific predictions, and matching scores are not a measure of relationship quality.
Request access
Tell us what you would like to build. We will reply by email with a trial account and test key.
കാലാതീതമായ ജ്യോതിഷം. സമകാലിക വ്യക്തത.
കൃത്യതയോടും സംയമനത്തോടും ആധുനിക ലക്ഷ്യബോധത്തോടും കൂടി അവതരിപ്പിക്കുന്ന പരമ്പരാഗത ജ്യോതിഷം.