API reference / Predictions & readings
Predictions & readings
Rule-based readings: sign horoscopes, transits, characteristics, life readings and period forecasts.
27 endpoints. Every endpoint is POST with a JSON body and your key in the Authorization header. Request schemas and examples come from the OpenAPI document; each example response was captured from the live engine and its data fields are a guide to the shape, not a contract.
Lifetime Malefic Transit Windows
POSTAvailable
https://api.96astro.com/v1/predictions/lifetime-malefic-transitsThe natal signs made sensitive (and why) and every period in which Saturn, Rahu, Ketu or Mars transits them, with dates and ages up to age 120. A screening, not a prediction.
- Credits
- 3 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
ayanamsha· objectnature· stringmalefics· array of stringsensitive_signs· array of objectperiods· array of objectmax_age· integer
Example request
curl -X POST https://api.96astro.com/v1/predictions/lifetime-malefic-transits \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/lifetime-malefic-transits", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.lifetimeMaleficTransits({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/lifetime-malefic-transits",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.lifetime_malefic_transits({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/lifetime-malefic-transits');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/lifetime-malefic-transits", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"ayanamsha": {
"id": "lahiri",
"name": "N.C. Lahiri",
"degrees": 23.7285
},
"nature": "A screening of when slow malefics cross sensitive signs. Not a prediction.",
"malefics": [
"Saturn",
"Rahu",
"Ketu"
],
"sensitive_signs": [
{
"sign": "Gemini",
"reasons": [
"6th house"
]
},
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Ayurdaya (Longevity Estimate) & Age
POSTAvailable
https://api.96astro.com/v1/predictions/ayurdayaClassical Ayurdaya spans by five methods (Pindayu, Nisargayu, Amsayu, Jeevayu, Badrayan) in years, months and days, and the selected method with its basis.
- Credits
- 3 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
ayanamsha· objectnature· stringmethods· objectselected· object
Example request
curl -X POST https://api.96astro.com/v1/predictions/ayurdaya \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/ayurdaya", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.ayurdaya({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/ayurdaya",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.ayurdaya({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/ayurdaya');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/ayurdaya", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"ayanamsha": {
"id": "lahiri",
"name": "N.C. Lahiri",
"degrees": 23.7285
},
"nature": "Classical Ayurdaya arithmetic (BPHS). An astrological calculation, not a medical or actuarial prediction.",
"methods": {
"pindayu": {
"years": 60,
"months": 3,
"days": 15
},
"nisargayu": {
"years": 45,
"months": 5,
"days": 20
},
"amsayu": {
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Personal Characteristics (in bundle)
POSTAvailable
https://api.96astro.com/v1/predictions/personal-characteristics-bundleTwelve rows, one per house: the sign, its lord, where the lord sits, its dignity, strength, retrograde and combust flags, and a reading derived from that placement.
- Credits
- 3 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
ayanamsha· objectascendant· stringascendant_lord· stringhouses· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/personal-characteristics-bundle \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/personal-characteristics-bundle", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.personalCharacteristicsBundle({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/personal-characteristics-bundle",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.personal_characteristics_bundle({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/personal-characteristics-bundle');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/personal-characteristics-bundle", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"ayanamsha": {
"id": "lahiri",
"name": "N.C. Lahiri",
"degrees": 23.7285
},
"ascendant": "Capricorn",
"ascendant_lord": "Saturn",
"houses": [
{
"house": 1,
"sign": "Capricorn",
"lord": "Saturn",
"lord_sign": "Sagittarius",
"lord_house": 12,
"lord_dignity": "Neutral",
"lord_strength": "Weak",
"lord_retrograde": false,
"lord_combust": false,
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Moon-Sign Horoscope: Daily
POSTAvailable
https://api.96astro.com/v1/predictions/sign-horoscope-dailyDaily transit-based forecast for each of the twelve Moon signs: a summary, highlights, score, ratings, lucky number and colour, and a remedy.
- Credits
- 1 credit
- Input
- Date and place
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datestringRequired | Civil date, YYYY-MM-DD. Limits: format date Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: Allowed value: lahiri |
nodestringOptional | Default: Allowed values: truemean |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
signstring | nullOptional | One Moon sign (e.g. 'virgo'); all twelve when omitted. Default: Allowed values: ariestaurusgeminicancerleovirgolibrascorpiosagittariuscapricornaquariuspisces Example: |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
| Value | Meaning |
|---|---|
aries | Aries |
taurus | Taurus |
gemini | Gemini |
cancer | Cancer |
leo | Leo |
virgo | Virgo |
libra | Libra |
scorpio | Scorpio |
sagittarius | Sagittarius |
capricorn | Capricorn |
aquarius | Aquarius |
pisces | Pisces |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
date· stringlocation· objectayanamsha· stringbasis· stringmoon_sign_on_date· stringsigns· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/sign-horoscope-daily \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}'const response = await fetch("https://api.96astro.com/v1/predictions/sign-horoscope-daily", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.signHoroscopeDaily({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/sign-horoscope-daily",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.sign_horoscope_daily({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/sign-horoscope-daily');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'date' => '2026-10-13',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
'sign' => 'virgo',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/sign-horoscope-daily", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"date": "2026-10-13",
"location": {
"latitude": 28.6139,
"longitude": 77.209,
"utc_offset": "+05:30"
},
"ayanamsha": "lahiri",
"basis": "moon_sign",
"moon_sign_on_date": "Libra",
"signs": [
{
"sign": "Virgo",
"start": "2026-10-13",
"end": "2026-10-13",
"summary": "Today, Virgo natives may notice that attention naturally shifts toward cash flow, savings, and practical financial choices. The transit picture is being shaped by Mercury's tone along with the movement of the faster planets, so outcomes depend heavily on timing, restraint, and practical judgment.\n\nSun in your 1st house supports self-confidence and vitality. Moon moving through the 2nd house can improve finances and speech. Mars's transit in the 11th house helps with gains, networks, and fulfillment. Saturn in the 7th house asks for care around partnerships and agreements. Sun appears to be the strongest support right now, helping matters connected with self-confidence and vitality. At the same time, Moon gives an additional push through finances and speech, which can help you recover momentum in delayed matters. The more sensitive area comes from Saturn, so situations involving partnerships and agreements may require more patience than usual.\n\nIn practical terms, the strongest visible results are likely in cash flow, savings, and practical financial choices, while the more delicate side of the period touches energy, resilience, and physical balance. budget carefully, prefer planned decisions, and avoid emotional or impulsive spending.\n\nFor the best use of the day, keep decisions simple, preserve your energy, and avoid reacting too strongly to temporary fluctuations. A steady pace will bring better results than emotional urgency.",
"highlights": "Sun in your 1st house supports self-confidence and vitality. Moon moving through the 2nd house can improve finances and speech.",
"score": 1.56,
"ratings": {
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Moon-Sign Horoscope: This week
POSTAvailable
https://api.96astro.com/v1/predictions/sign-horoscope-weeklyThis week transit-based forecast for each of the twelve Moon signs: a summary, highlights, score, ratings, lucky number and colour, and a remedy.
- Credits
- 1 credit
- Input
- Date and place
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datestringRequired | Civil date, YYYY-MM-DD. Limits: format date Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: Allowed value: lahiri |
nodestringOptional | Default: Allowed values: truemean |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
signstring | nullOptional | One Moon sign (e.g. 'virgo'); all twelve when omitted. Default: Allowed values: ariestaurusgeminicancerleovirgolibrascorpiosagittariuscapricornaquariuspisces Example: |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
| Value | Meaning |
|---|---|
aries | Aries |
taurus | Taurus |
gemini | Gemini |
cancer | Cancer |
leo | Leo |
virgo | Virgo |
libra | Libra |
scorpio | Scorpio |
sagittarius | Sagittarius |
capricorn | Capricorn |
aquarius | Aquarius |
pisces | Pisces |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
date· stringlocation· objectayanamsha· stringbasis· stringmoon_sign_on_date· stringsigns· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/sign-horoscope-weekly \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}'const response = await fetch("https://api.96astro.com/v1/predictions/sign-horoscope-weekly", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.signHoroscopeWeekly({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/sign-horoscope-weekly",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.sign_horoscope_weekly({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/sign-horoscope-weekly');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'date' => '2026-10-13',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
'sign' => 'virgo',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/sign-horoscope-weekly", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"date": "2026-10-13",
"location": {
"latitude": 28.6139,
"longitude": 77.209,
"utc_offset": "+05:30"
},
"ayanamsha": "lahiri",
"basis": "moon_sign",
"moon_sign_on_date": "Libra",
"signs": [
{
"sign": "Virgo",
"start": "2026-10-12",
"end": "2026-10-18",
"summary": "This week, Virgo natives may notice that attention naturally shifts toward cash flow, savings, and practical financial choices. The transit picture is being shaped by Mercury's tone along with the movement of the faster planets, so outcomes depend heavily on timing, restraint, and practical judgment.\n\nMars in your 11th house supports gains, networks, and fulfillment. Mercury moving through the 2nd house can improve finances and speech. Jupiter's transit in the 11th house helps with gains, networks, and fulfillment. Saturn in the 7th house asks for care around partnerships and agreements. Mars appears to be the strongest support right now, helping matters connected with gains, networks, and fulfillment. At the same time, Mercury gives an additional push through finances and speech, which can help you recover momentum in delayed matters. The more sensitive area comes from Saturn, so situations involving partnerships and agreements may require more patience than usual.\n\nIn practical terms, the strongest visible results are likely in cash flow, savings, and practical financial choices, while the more delicate side of the period touches energy, resilience, and physical balance. budget carefully, prefer planned decisions, and avoid emotional or impulsive spending.\n\nAcross the week, consistency will matter more than speed. If you stay organized, respect your limits, and work with the stronger transits instead of forcing weak areas, the week can produce stable gains.",
"highlights": "Mars in your 11th house supports gains, networks, and fulfillment. Mercury moving through the 2nd house can improve finances and speech.",
"score": 1.44,
"ratings": {
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Moon-Sign Horoscope: Next week
POSTAvailable
https://api.96astro.com/v1/predictions/sign-horoscope-next-weekNext week transit-based forecast for each of the twelve Moon signs: a summary, highlights, score, ratings, lucky number and colour, and a remedy.
- Credits
- 1 credit
- Input
- Date and place
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datestringRequired | Civil date, YYYY-MM-DD. Limits: format date Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: Allowed value: lahiri |
nodestringOptional | Default: Allowed values: truemean |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
signstring | nullOptional | One Moon sign (e.g. 'virgo'); all twelve when omitted. Default: Allowed values: ariestaurusgeminicancerleovirgolibrascorpiosagittariuscapricornaquariuspisces Example: |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
| Value | Meaning |
|---|---|
aries | Aries |
taurus | Taurus |
gemini | Gemini |
cancer | Cancer |
leo | Leo |
virgo | Virgo |
libra | Libra |
scorpio | Scorpio |
sagittarius | Sagittarius |
capricorn | Capricorn |
aquarius | Aquarius |
pisces | Pisces |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
date· stringlocation· objectayanamsha· stringbasis· stringmoon_sign_on_date· stringsigns· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/sign-horoscope-next-week \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}'const response = await fetch("https://api.96astro.com/v1/predictions/sign-horoscope-next-week", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.signHoroscopeNextWeek({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/sign-horoscope-next-week",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.sign_horoscope_next_week({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/sign-horoscope-next-week');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'date' => '2026-10-13',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
'sign' => 'virgo',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/sign-horoscope-next-week", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"date": "2026-10-13",
"location": {
"latitude": 28.6139,
"longitude": 77.209,
"utc_offset": "+05:30"
},
"ayanamsha": "lahiri",
"basis": "moon_sign",
"moon_sign_on_date": "Libra",
"signs": [
{
"sign": "Virgo",
"start": "2026-10-19",
"end": "2026-10-25",
"summary": "Next week, Virgo natives may notice that attention naturally shifts toward cash flow, savings, and practical financial choices. The transit picture is being shaped by Mercury's tone along with the movement of the faster planets, so outcomes depend heavily on timing, restraint, and practical judgment.\n\nMars in your 11th house supports gains, networks, and fulfillment. Mercury moving through the 2nd house can improve finances and speech. Jupiter's transit in the 11th house helps with gains, networks, and fulfillment. Saturn in the 7th house asks for care around partnerships and agreements. Mars appears to be the strongest support right now, helping matters connected with gains, networks, and fulfillment. At the same time, Mercury gives an additional push through finances and speech, which can help you recover momentum in delayed matters. The more sensitive area comes from Saturn, so situations involving partnerships and agreements may require more patience than usual.\n\nIn practical terms, the strongest visible results are likely in cash flow, savings, and practical financial choices, while the more delicate side of the period touches energy, resilience, and physical balance. budget carefully, prefer planned decisions, and avoid emotional or impulsive spending.\n\nAcross the week, consistency will matter more than speed. If you stay organized, respect your limits, and work with the stronger transits instead of forcing weak areas, the week can produce stable gains.",
"highlights": "Mars in your 11th house supports gains, networks, and fulfillment. Mercury moving through the 2nd house can improve finances and speech.",
"score": 1.24,
"ratings": {
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Moon-Sign Horoscope: Monthly
POSTAvailable
https://api.96astro.com/v1/predictions/sign-horoscope-monthlyMonthly transit-based forecast for each of the twelve Moon signs: the period's dates, ratings and themed reading sections.
- Credits
- 1 credit
- Input
- Date and place
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datestringRequired | Civil date, YYYY-MM-DD. Limits: format date Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: Allowed value: lahiri |
nodestringOptional | Default: Allowed values: truemean |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
signstring | nullOptional | One Moon sign (e.g. 'virgo'); all twelve when omitted. Default: Allowed values: ariestaurusgeminicancerleovirgolibrascorpiosagittariuscapricornaquariuspisces Example: |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
| Value | Meaning |
|---|---|
aries | Aries |
taurus | Taurus |
gemini | Gemini |
cancer | Cancer |
leo | Leo |
virgo | Virgo |
libra | Libra |
scorpio | Scorpio |
sagittarius | Sagittarius |
capricorn | Capricorn |
aquarius | Aquarius |
pisces | Pisces |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
date· stringlocation· objectayanamsha· stringbasis· stringmoon_sign_on_date· stringsigns· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/sign-horoscope-monthly \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}'const response = await fetch("https://api.96astro.com/v1/predictions/sign-horoscope-monthly", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.signHoroscopeMonthly({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/sign-horoscope-monthly",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.sign_horoscope_monthly({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/sign-horoscope-monthly');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'date' => '2026-10-13',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
'sign' => 'virgo',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/sign-horoscope-monthly", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"date": "2026-10-13",
"location": {
"latitude": 28.6139,
"longitude": 77.209,
"utc_offset": "+05:30"
},
"ayanamsha": "lahiri",
"basis": "moon_sign",
"moon_sign_on_date": "Libra",
"signs": [
{
"sign": "Virgo",
"start": "2026-10-01",
"end": "2026-10-31",
"ratings": {
"health": 2,
"finance": 5,
"career": 5,
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Moon-Sign Horoscope: Yearly
POSTAvailable
https://api.96astro.com/v1/predictions/sign-horoscope-yearlyYearly transit-based forecast for each of the twelve Moon signs: the period's dates, ratings and themed reading sections.
- Credits
- 1 credit
- Input
- Date and place
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datestringRequired | Civil date, YYYY-MM-DD. Limits: format date Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: Allowed value: lahiri |
nodestringOptional | Default: Allowed values: truemean |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
signstring | nullOptional | One Moon sign (e.g. 'virgo'); all twelve when omitted. Default: Allowed values: ariestaurusgeminicancerleovirgolibrascorpiosagittariuscapricornaquariuspisces Example: |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
| Value | Meaning |
|---|---|
aries | Aries |
taurus | Taurus |
gemini | Gemini |
cancer | Cancer |
leo | Leo |
virgo | Virgo |
libra | Libra |
scorpio | Scorpio |
sagittarius | Sagittarius |
capricorn | Capricorn |
aquarius | Aquarius |
pisces | Pisces |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
date· stringlocation· objectayanamsha· stringbasis· stringmoon_sign_on_date· stringsigns· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/sign-horoscope-yearly \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}'const response = await fetch("https://api.96astro.com/v1/predictions/sign-horoscope-yearly", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.signHoroscopeYearly({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/sign-horoscope-yearly",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.sign_horoscope_yearly({
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/sign-horoscope-yearly');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'date' => '2026-10-13',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
'sign' => 'virgo',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"date": "2026-10-13",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"sign": "virgo"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/sign-horoscope-yearly", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"date": "2026-10-13",
"location": {
"latitude": 28.6139,
"longitude": 77.209,
"utc_offset": "+05:30"
},
"ayanamsha": "lahiri",
"basis": "moon_sign",
"moon_sign_on_date": "Libra",
"signs": [
{
"sign": "Virgo",
"start": "2026-01-01",
"end": "2026-12-31",
"ratings": {
"health": 2,
"finance": 3,
"career": 4,
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Zodiac Sign Profiles
POSTAvailable
https://api.96astro.com/v1/predictions/sign-profileReference profile of each of the twelve signs: symbol, element, modality, ruling planet, natural house, mantra, body part, colours, birthstones and tropical Sun dates.
- Credits
- 1 credit
- Input
- Date and place
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
signstring | nullOptional | One sign; all twelve when omitted. Default: Allowed values: ariestaurusgeminicancerleovirgolibrascorpiosagittariuscapricornaquariuspisces Example: |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
| Value | Meaning |
|---|---|
aries | Aries |
taurus | Taurus |
gemini | Gemini |
cancer | Cancer |
leo | Leo |
virgo | Virgo |
libra | Libra |
scorpio | Scorpio |
sagittarius | Sagittarius |
capricorn | Capricorn |
aquarius | Aquarius |
pisces | Pisces |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
signs· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/sign-profile \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sign": "aries"
}'const response = await fetch("https://api.96astro.com/v1/predictions/sign-profile", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"sign": "aries"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.signProfile({
"sign": "aries"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/sign-profile",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"sign": "aries",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.sign_profile({
"sign": "aries",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/sign-profile');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'sign' => 'aries',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"sign": "aries"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/sign-profile", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"signs": [
{
"sign": "Aries",
"symbol": "The Ram",
"element": "Fire",
"modality": "Cardinal",
"ruling_planet": "Mars",
"natural_house": 1,
"mantra": "I Am",
"body_part": "Head",
"colors": "Red & Mustard",
"birthstone": "Diamond",
"alternate_birthstones": "Bloodstone, Topaz Sapphire, Jasper, and Aquamarine",
"tropical_sun_dates": "March 21 - April 19"
}
]
},
"meta": {
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Personal Daily Forecast
POSTAvailable
https://api.96astro.com/v1/predictions/daily-personal-forecastA day's forecast from a birth (or Moon sign, Sun sign and nakshatra): the transiting Moon and Sun with their effects, the tara of the day and an overall quality.
- Credits
- 1 credit
- Input
- Specific input
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
birthobject | nullOptional | A birth; its Moon sign, Sun sign and nakshatra are used (Lahiri). Default: |
birth.datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
birth.timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
birth.utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
birth.latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
birth.longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
birth.ayanamshastringOptional | Default: |
birth.languagestringOptional | Output language (ISO 639-1). Each capability lists the languages it supports. Default: |
birth.nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
moon_signstring | nullOptional | Birth Moon sign (sidereal), instead of `birth`. Default: Allowed values: AriesTaurusGeminiCancerLeoVirgoLibraScorpioSagittariusCapricornAquariusPisces |
sun_signstring | nullOptional | Birth Sun sign (sidereal), instead of `birth`. Default: Allowed values: AriesTaurusGeminiCancerLeoVirgoLibraScorpioSagittariusCapricornAquariusPisces |
nakshatrastring | nullOptional | Birth Moon nakshatra, instead of `birth`. Default: |
datestringRequired | The day to forecast, YYYY-MM-DD. Limits: format date Example: |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
birth· objectnote· stringdate· stringmoment_utc· stringmoon· objectsun· objecttara· objectquality· string
Example request
curl -X POST https://api.96astro.com/v1/predictions/daily-personal-forecast \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"birth": {
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
},
"date": "2026-10-13"
}'const response = await fetch("https://api.96astro.com/v1/predictions/daily-personal-forecast", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"birth": {
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
},
"date": "2026-10-13"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.dailyPersonalForecast({
"birth": {
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
},
"date": "2026-10-13"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/daily-personal-forecast",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"birth": {
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
"date": "2026-10-13",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.daily_personal_forecast({
"birth": {
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
"date": "2026-10-13",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/daily-personal-forecast');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'birth' => [
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
],
'date' => '2026-10-13',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"birth": {
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
},
"date": "2026-10-13"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/daily-personal-forecast", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"birth": {
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"source": "birth"
},
"note": "Transiting Moon and Sun are read at 12:00 UTC of each date (Lahiri).",
"date": "2026-10-13",
"moment_utc": "2026-10-13T12:00:00Z",
"moon": {
"sign": "Libra",
"degree": 29.12,
"longitude": 209.122,
"nakshatra": "Vishakha",
"nakshatra_number": 16,
"pada": 3,
"nakshatra_lord": "Jupiter",
"nakshatra_deity": "Indragni",
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Personal Weekly Forecast
POSTAvailable
https://api.96astro.com/v1/predictions/weekly-personal-forecastSeven days of the personal forecast with the Moon, Sun, tara and quality for each day, and a summary of favourable and challenging days.
- Credits
- 1 credit
- Input
- Specific input
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
birthobject | nullOptional | A birth; its Moon sign, Sun sign and nakshatra are used (Lahiri). Default: |
birth.datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ |
birth.timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: |
birth.utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
birth.latitudenumberRequired | Limits: minimum -90, maximum 90 |
birth.longitudenumberRequired | Limits: minimum -180, maximum 180 |
birth.ayanamshastringOptional | Default: |
birth.languagestringOptional | Output language (ISO 639-1). Each capability lists the languages it supports. Default: |
birth.nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
moon_signstring | nullOptional | Birth Moon sign (sidereal), instead of `birth`. Default: Allowed values: AriesTaurusGeminiCancerLeoVirgoLibraScorpioSagittariusCapricornAquariusPisces Example: |
sun_signstring | nullOptional | Birth Sun sign (sidereal), instead of `birth`. Default: Allowed values: AriesTaurusGeminiCancerLeoVirgoLibraScorpioSagittariusCapricornAquariusPisces Example: |
nakshatrastring | nullOptional | Birth Moon nakshatra, instead of `birth`. Default: Example: |
start_datestringRequired | First of the seven days, YYYY-MM-DD. Limits: format date Example: |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
birth· objectnote· stringstart_date· stringend_date· stringsummary· objectdays· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/weekly-personal-forecast \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"start_date": "2026-10-12"
}'const response = await fetch("https://api.96astro.com/v1/predictions/weekly-personal-forecast", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"start_date": "2026-10-12"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.weeklyPersonalForecast({
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"start_date": "2026-10-12"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/weekly-personal-forecast",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"start_date": "2026-10-12",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.weekly_personal_forecast({
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"start_date": "2026-10-12",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/weekly-personal-forecast');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'moon_sign' => 'Virgo',
'sun_sign' => 'Libra',
'nakshatra' => 'Chitra',
'start_date' => '2026-10-12',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"start_date": "2026-10-12"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/weekly-personal-forecast", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"birth": {
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"source": "given"
},
"note": "Transiting Moon and Sun are read at 12:00 UTC of each date (Lahiri).",
"start_date": "2026-10-12",
"end_date": "2026-10-18",
"summary": {
"moon_signs": [
"Libra",
"Scorpio",
"Sagittarius"
],
"favourable_days": [
"2026-10-12",
"2026-10-14",
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Personal Monthly Forecast
POSTAvailable
https://api.96astro.com/v1/predictions/monthly-personal-forecastA month of the personal forecast day by day, grouped into weeks, with favourable and challenging day counts and the best and toughest weeks.
- Credits
- 1 credit
- Input
- Specific input
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
birthobject | nullOptional | A birth; its Moon sign, Sun sign and nakshatra are used (Lahiri). Default: |
birth.datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ |
birth.timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: |
birth.utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
birth.latitudenumberRequired | Limits: minimum -90, maximum 90 |
birth.longitudenumberRequired | Limits: minimum -180, maximum 180 |
birth.ayanamshastringOptional | Default: |
birth.languagestringOptional | Output language (ISO 639-1). Each capability lists the languages it supports. Default: |
birth.nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
moon_signstring | nullOptional | Birth Moon sign (sidereal), instead of `birth`. Default: Allowed values: AriesTaurusGeminiCancerLeoVirgoLibraScorpioSagittariusCapricornAquariusPisces Example: |
sun_signstring | nullOptional | Birth Sun sign (sidereal), instead of `birth`. Default: Allowed values: AriesTaurusGeminiCancerLeoVirgoLibraScorpioSagittariusCapricornAquariusPisces Example: |
nakshatrastring | nullOptional | Birth Moon nakshatra, instead of `birth`. Default: Example: |
monthstringRequired | Calendar month, YYYY-MM. Example: |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
birth· objectnote· stringmonth· stringstart_date· stringend_date· stringsummary· objectweeks· array of objectdays· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/monthly-personal-forecast \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"month": "2026-10"
}'const response = await fetch("https://api.96astro.com/v1/predictions/monthly-personal-forecast", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"month": "2026-10"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.monthlyPersonalForecast({
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"month": "2026-10"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/monthly-personal-forecast",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"month": "2026-10",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.monthly_personal_forecast({
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"month": "2026-10",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/monthly-personal-forecast');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'moon_sign' => 'Virgo',
'sun_sign' => 'Libra',
'nakshatra' => 'Chitra',
'month' => '2026-10',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"month": "2026-10"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/monthly-personal-forecast", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"birth": {
"moon_sign": "Virgo",
"sun_sign": "Libra",
"nakshatra": "Chitra",
"source": "given"
},
"note": "Transiting Moon and Sun are read at 12:00 UTC of each date (Lahiri).",
"month": "2026-10",
"start_date": "2026-10-01",
"end_date": "2026-10-31",
"summary": {
"favourable_day_count": 18,
"challenging_day_count": 9,
"best_week_start": "2026-10-26",
"toughest_week_start": "2026-10-12",
"moon_signs": [
"Taurus",
"Gemini",
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Twelve-Month Prediction
POSTAvailable
https://api.96astro.com/v1/predictions/twelve-month-predictionTwelve months from a start month: the running mahadasha and antardasha in each month with a reading of each.
- Credits
- 1 credit
- Input
- Specific input
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
start_monthstringRequired | First of the twelve months, YYYY-MM. Example: |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
ayanamsha· stringdasha_system· stringbirth_dasha· objectmonths· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/twelve-month-prediction \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"start_month": "2026-10"
}'const response = await fetch("https://api.96astro.com/v1/predictions/twelve-month-prediction", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"start_month": "2026-10"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.twelveMonthPrediction({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"start_month": "2026-10"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/twelve-month-prediction",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"start_month": "2026-10",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.twelve_month_prediction({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"start_month": "2026-10",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/twelve-month-prediction');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
'start_month' => '2026-10',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"start_month": "2026-10"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/twelve-month-prediction", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"ayanamsha": "lahiri",
"dasha_system": "vimshottari",
"birth_dasha": {
"lord": "Mars",
"balance_years": 4.6148
},
"months": [
{
"month": "2026-10",
"start": "2026-10-01",
"end": "2026-10-31",
"dasha_as_of": "2026-10-16",
"mahadasha": "Jupiter",
"antardasha": "Mars",
"antardasha_ends": "2027-01-04",
"reading": "During October 2026, Jupiter Mahadasha / Mars Antardasha is active. In this sub-period, drive and competitive energy are prominent. The Jupiter Mahadasha is one of the most auspicious periods, bringing wisdom, expansion, wealth and spiritual growth. Children, higher education, legal matters and religious activities flourish. Guru-Vandana, charitable acts and study of sacred texts are highly beneficial.",
"mahadasha_reading": "The Jupiter Mahadasha is one of the most auspicious periods, bringing wisdom, expansion, wealth and spiritual growth. Children, higher education, legal matters and religious activities flourish. Guru-Vandana, charitable acts and study of sacred texts are highly beneficial.",
"antardasha_theme": "drive and competitive energy are prominent"
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Personal Characteristics
POSTAvailable
https://api.96astro.com/v1/predictions/personal-characteristicsTwelve rows, one per house: the sign, its lord, where the lord sits, its dignity and strength, and a sentence derived from that placement.
- Credits
- 1 credit
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
ayanamsha· stringascendant· stringascendant_lord· stringhouses· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/personal-characteristics \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/personal-characteristics", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.personalCharacteristics({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/personal-characteristics",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.personal_characteristics({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/personal-characteristics');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/personal-characteristics", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"ayanamsha": "lahiri",
"ascendant": "Capricorn",
"ascendant_lord": "Saturn",
"houses": [
{
"house": 1,
"sign": "Capricorn",
"lord": "Saturn",
"lord_sign": "Sagittarius",
"lord_house": 12,
"lord_dignity": "Neutral",
"lord_retrograde": false,
"lord_combust": false,
"lord_strength": "Weak",
"reading": "Because the 1st lord Saturn has moved to the 12th house, your health, temperament and how you meet the world is worked out through your expenses, foreign lands and release. Saturn is neutral in Sagittarius, giving a weak result; the 12th is a difficult house, which asks for patience here."
},
{
"house": 2,
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Detailed Life Reading
POSTAvailable
https://api.96astro.com/v1/predictions/detailed-lifeA life reading by house (domain): each with its sign, lord and placement, occupants, a score, band and verdict, plus an overview.
- Credits
- 10 credits
- Input
- Specific input
- Output
- JSON
- Delivery
- Direct response (JSON); PDF via /v1/jobs/pdf
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
ayanamsha· objectnode· stringhouse_system· stringascendant· objectoverview· stringdomains· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/detailed-life \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/detailed-life", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.detailedLife({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/detailed-life",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.detailed_life({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/detailed-life');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/detailed-life", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"ayanamsha": {
"id": "lahiri"
},
"node": "true",
"house_system": "whole_sign",
"ascendant": {
"sign": "Capricorn",
"sign_number": 10
},
"overview": "Rising sign Capricorn sets the tone of the life. The chart is strongest in ‘Fortune & Dharma’ (score 98) and most tested in ‘Education & Children’ (score 31). Read each domain below for the house lord's placement, occupying planets and the resulting outlook.",
"domains": [
{
"house": 1,
"title": "Personality & Self",
"keywords": "temperament, vitality, overall life direction",
"sign": "Capricorn",
"lord": "Saturn",
"lord_house": 12,
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Prediction Report: Nature & temperament
POSTAvailable
https://api.96astro.com/v1/predictions/prediction-natureThe nature & temperament section of the natal prediction report, derived from the Lagna, Moon nakshatra and planet placements.
- Credits
- 10 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response (JSON); PDF via /v1/jobs/pdf
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
section· stringayanamsha· objectnode· stringlagna· stringlagna_lord· stringmoon_nakshatra· stringkeyphrase· stringbiggest_talent· stringbiggest_weakness· stringambition· stringtraits_classical· array of stringtraits_modern· array of string
Example request
curl -X POST https://api.96astro.com/v1/predictions/prediction-nature \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/prediction-nature", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.predictionNature({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/prediction-nature",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.prediction_nature({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/prediction-nature');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/prediction-nature", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"section": "nature",
"ayanamsha": {
"id": "lahiri"
},
"node": "true",
"lagna": "Capricorn",
"lagna_lord": "Saturn",
"moon_nakshatra": "Chitra",
"keyphrase": "I use.",
"biggest_talent": "Discipline and endurance.",
"biggest_weakness": "Coldness and excessive caution.",
"ambition": "Status and achievement.",
"traits_classical": [
"The ruler of the Capricorn Lagna is Saturn who is the taskmaster of the zodiac; therefore the person will be disciplined, responsible and highly ambitious.",
"He will be practical and will always think in terms of results and long-term benefits.",
"He will be patient and will be willing to work hard over many years to achieve goals."
],
"traits_modern": [
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Prediction Report: Physical traits
POSTAvailable
https://api.96astro.com/v1/predictions/prediction-physicalThe physical traits section of the natal prediction report, derived from the Lagna, Moon nakshatra and planet placements.
- Credits
- 10 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response (JSON); PDF via /v1/jobs/pdf
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
section· stringayanamsha· objectnode· stringlagna· stringlagna_lord· stringmoon_nakshatra· stringclassical· stringtraits· array of stringmodern· string
Example request
curl -X POST https://api.96astro.com/v1/predictions/prediction-physical \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/prediction-physical", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.predictionPhysical({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/prediction-physical",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.prediction_physical({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/prediction-physical');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/prediction-physical", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"section": "physical",
"ayanamsha": {
"id": "lahiri"
},
"node": "true",
"lagna": "Capricorn",
"lagna_lord": "Saturn",
"moon_nakshatra": "Chitra",
"classical": "The lord of Capricorn Lagna is Saturn. According to Brihat Jataka and Phaladeepika, the native will be of medium to tall height with a lean, bony and angular frame that is characteristic of Saturn's austere and disciplined nature. The body frame is spare, spare and somewhat gaunt in youth but gains strength and substance with age — Capricorn natives often improve in physical condition as they grow older. The face is long and narrow with high, prominent cheekbones, a pointed chin and serious, thoughtful expression. The eyes are deep-set, serious, intelligent and penetrating with an air of quiet authority and wisdom. The complexion is dark, dusky or sallow and the skin tends to be dry, rough and somewhat coarse. According to Saravali, the joints, knees and bones of the Capricorn native are particularly prominent and may be subject to health issues. The teeth may be prominent and the nose is often aquiline or beaked. The hair is generally dark, coarse and straight. According to Jataka Parijata, the native projects an air of seriousness, authority, experience and seasoned wisdom beyond their years. The walk is steady and deliberate. The constitution is Vata-dominant, conferring a lean physique, dry skin, susceptibility to cold and tendency toward joint and bone-related health issues.",
"traits": [
"The native will be of medium to tall height with a lean, bony and angular frame.",
"The face will be long with high cheekbones, a pointed chin and serious expression.",
"The eyes are deep-set, serious and intelligent with an air of quiet authority."
],
"modern": "The Capricorn Lagna native has a Vata-dominant constitution with Saturn governing the physical structure, bones and longevity. The skeletal system — bones, joints, knees, teeth and skin — is the primary health focus area and requires careful, consistent and long-term attention. The native's constitution is slow but steady and responds exceptionally well to disciplined long-term health care practices. Cold, dryness and isolation negatively affect this constitution significantly and must be carefully avoided. The native is prone to arthritis, osteoporosis, knee problems, dental issues, skin conditions and depression when isolated or under prolonged stress. The native benefits greatly from warming and nourishing foods, regular sesame oil self-massage, consistent sleep hygiene, structured physical activity emphasising spine, knee and joint strength such as yoga and weight-bearing exercise, and deliberate avoidance of cold, damp environments. Calcium, vitamin D and magnesium supplementation should be considered. Social connection and warm relationships are important for psychological wellbeing which directly supports physical health for this constitution."
},
"meta": {
"request_id": "req_00000000000000000000",
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Prediction Report: Lucky days, colours, numbers, stones
POSTAvailable
https://api.96astro.com/v1/predictions/prediction-lucky-infoThe lucky days, colours, numbers, stones section of the natal prediction report, derived from the Lagna, Moon nakshatra and planet placements.
- Credits
- 10 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response (JSON); PDF via /v1/jobs/pdf
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
section· stringayanamsha· objectnode· stringlagna· stringlagna_lord· stringmoon_nakshatra· stringbased_on· objectlucky_days· stringlucky_colours· stringlucky_numbers· stringgemstone· stringsubstitute_stones· stringauspicious_signs· stringauspicious_period· stringinauspicious_day· stringinauspicious_months· stringinauspicious_tithis· string
Example request
curl -X POST https://api.96astro.com/v1/predictions/prediction-lucky-info \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/prediction-lucky-info", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.predictionLuckyInfo({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/prediction-lucky-info",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.prediction_lucky_info({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/prediction-lucky-info');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/prediction-lucky-info", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"section": "lucky_info",
"ayanamsha": {
"id": "lahiri"
},
"node": "true",
"lagna": "Capricorn",
"lagna_lord": "Saturn",
"moon_nakshatra": "Chitra",
"based_on": {
"lagna_lord": "Saturn"
},
"lucky_days": "Saturday and Wednesday are very favorable.",
"lucky_colours": "Dark Blue and Black are lucky. Red and Pink will be unlucky.",
"lucky_numbers": "8, 4, 6 and 17 are very lucky numbers. 1, 10 and 19 of every month are inauspicious.",
"gemstone": "Blue Sapphire (Neelam). Substitute: Amethyst or Blue Topaz.",
"substitute_stones": "Lapis Lazuli, Blue Spinel or Iolite.",
"auspicious_signs": "Capricorn, Aquarius, Taurus and Libra are favorable.",
"auspicious_period": "The month of Pushya or Magha (mid-December to mid-January) is very auspicious. According to Yavanarcharya, Krishna Paksha, Saturday evening is the most favorable time. Dates 8, 17, 26 of every month are especially lucky.",
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Prediction Report: Birth nakshatra interpretation
POSTAvailable
https://api.96astro.com/v1/predictions/prediction-nakshatra-interpThe birth nakshatra interpretation section of the natal prediction report, derived from the Lagna, Moon nakshatra and planet placements.
- Credits
- 10 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response (JSON); PDF via /v1/jobs/pdf
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
section· stringayanamsha· objectnode· stringlagna· stringlagna_lord· stringmoon_nakshatra· stringnakshatra· stringlord· stringpada· integermoon_sign· stringmoon_sign_lord· stringbirth_syllable· stringdeity· stringgana· stringyoni· stringvarna· stringnadi· stringreadings· objecttraits_classical· array of stringtraits_modern· array of stringpada_reading· objecthealth· stringremedy· string
Example request
curl -X POST https://api.96astro.com/v1/predictions/prediction-nakshatra-interp \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/prediction-nakshatra-interp", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.predictionNakshatraInterp({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/prediction-nakshatra-interp",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.prediction_nakshatra_interp({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/prediction-nakshatra-interp');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/prediction-nakshatra-interp", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"section": "nakshatra_interp",
"ayanamsha": {
"id": "lahiri"
},
"node": "true",
"lagna": "Capricorn",
"lagna_lord": "Saturn",
"moon_nakshatra": "Chitra",
"nakshatra": "Chitra",
"lord": "Mars",
"pada": 2,
"moon_sign": "Virgo",
"moon_sign_lord": "Mercury",
"birth_syllable": "Po",
"deity": "Tvashta (Divine Craftsman)",
"gana": "Rakshasa (Fierce)",
"yoni": "Vyaghra (Tiger)",
"varna": "Farmer",
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Prediction Report: Planetary dispositions
POSTAvailable
https://api.96astro.com/v1/predictions/prediction-planetary-dispositionsThe planetary dispositions section of the natal prediction report, derived from the Lagna, Moon nakshatra and planet placements.
- Credits
- 10 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response (JSON); PDF via /v1/jobs/pdf
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
section· stringayanamsha· objectnode· stringlagna· stringlagna_lord· stringmoon_nakshatra· stringhouse_system· stringplanets· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/prediction-planetary-dispositions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/prediction-planetary-dispositions", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.predictionPlanetaryDispositions({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/prediction-planetary-dispositions",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.prediction_planetary_dispositions({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/prediction-planetary-dispositions');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/prediction-planetary-dispositions", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"section": "planetary_dispositions",
"ayanamsha": {
"id": "lahiri"
},
"node": "true",
"lagna": "Capricorn",
"lagna_lord": "Saturn",
"moon_nakshatra": "Chitra",
"house_system": "whole_sign",
"planets": [
{
"planet": "Sun",
"house": 10,
"if_well_placed": "Sun in the tenth house is one of the best placements for career success and worldly authority. The native will be famous, respected and will hold positions of great power. He will succeed in government service, politics or leadership roles. He will have a distinguished career and will be well-known in his field of work.",
"if_afflicted": "If afflicted, there may be sudden fall from position, conflicts with superiors and government troubles. The native may be excessively ambitious and may harm others in pursuit of status. Career setbacks and public humiliation are possible when the Sun is severely afflicted."
},
{
"planet": "Moon",
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Prediction Report: House lords (bhavesh)
POSTAvailable
https://api.96astro.com/v1/predictions/prediction-bhaveshThe house lords (bhavesh) section of the natal prediction report, derived from the Lagna, Moon nakshatra and planet placements.
- Credits
- 10 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response (JSON); PDF via /v1/jobs/pdf
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
section· stringayanamsha· objectnode· stringlagna· stringlagna_lord· stringmoon_nakshatra· stringhouse_system· stringhouses· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/prediction-bhavesh \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/prediction-bhavesh", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.predictionBhavesh({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/prediction-bhavesh",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.prediction_bhavesh({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/prediction-bhavesh');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/prediction-bhavesh", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"section": "bhavesh",
"ayanamsha": {
"id": "lahiri"
},
"node": "true",
"lagna": "Capricorn",
"lagna_lord": "Saturn",
"moon_nakshatra": "Chitra",
"house_system": "whole_sign",
"houses": [
{
"house": 1,
"lord": "Saturn",
"lord_in_house": 12,
"reading": "When the lord of the first house is in the twelfth house, the native's life will often take them far from their place of birth — to foreign lands, ashrams or places of seclusion. The native may experience financial losses and expenditure that outpaces income. However, spiritual growth, inner contemplation and the development of genuine wisdom through solitude are strongly indicated. The native may achieve genuine liberation and spiritual peace through a life of renunciation and inner devotion.",
"classical": {
"lomasha": "लग्नेशः व्ययभावे, विदेशगमनं स्वप्रियम्। मोक्षाभिलाषी वैरागी, व्ययशीलः परदेशस्थः।। The lord of the first house in the twelfth house indicates a tendency toward foreign travel, spirituality and renunciation. The native is inclined toward solitude and expenditure.",
"yavana": "यदि लग्नाधिपः द्वादशे। If the lord of the first house is in the twelfth house, the native may live abroad or spend extended periods in foreign countries. The native may be inclined toward spiritual practice, solitude and the inner life. Expenditure will be high and financial accumulation may be difficult.",
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Prediction Report: Current dasha reading
POSTAvailable
https://api.96astro.com/v1/predictions/prediction-dashaThe current dasha reading section of the natal prediction report, derived from the Lagna, Moon nakshatra and planet placements.
- Credits
- 10 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response (JSON); PDF via /v1/jobs/pdf
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
section· stringayanamsha· objectnode· stringlagna· stringlagna_lord· stringmoon_nakshatra· stringsystem· stringas_of· stringmahadasha· objectantardasha· object
Example request
curl -X POST https://api.96astro.com/v1/predictions/prediction-dasha \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/prediction-dasha", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.predictionDasha({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/prediction-dasha",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.prediction_dasha({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/prediction-dasha');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/prediction-dasha", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"section": "dasha",
"ayanamsha": {
"id": "lahiri"
},
"node": "true",
"lagna": "Capricorn",
"lagna_lord": "Saturn",
"moon_nakshatra": "Chitra",
"system": "vimshottari",
"as_of": "2026-10-14",
"mahadasha": {
"lord": "Jupiter",
"start": "2013-05-30",
"end": "2029-05-30",
"lord_house": 7,
"reading": [
"There will be gain of wealth, prosperity and happiness through ethical and righteous means.",
"The native will receive the blessings and grace of teachers, gurus and divine figures.",
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Prediction Report: Gem recommendation
POSTAvailable
https://api.96astro.com/v1/predictions/prediction-gemThe gem recommendation section of the natal prediction report, derived from the Lagna, Moon nakshatra and planet placements.
- Credits
- 10 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response (JSON); PDF via /v1/jobs/pdf
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
section· stringayanamsha· objectnode· stringlagna· stringlagna_lord· stringmoon_nakshatra· stringbased_on· objectprimary· stringsubstitutes· stringuparatna· stringmetal· stringfinger· stringday· stringmantra· stringritual· stringcaution· stringshloka· objectintroduction· stringdescription· stringstrength_analysis· string
Example request
curl -X POST https://api.96astro.com/v1/predictions/prediction-gem \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/prediction-gem", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.predictionGem({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/prediction-gem",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.prediction_gem({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/prediction-gem');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/prediction-gem", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"section": "gem",
"ayanamsha": {
"id": "lahiri"
},
"node": "true",
"lagna": "Capricorn",
"lagna_lord": "Saturn",
"moon_nakshatra": "Chitra",
"based_on": {
"lagna": "Capricorn",
"lagna_lord": "Saturn",
"lagna_lord_sign": "Sagittarius",
"lagna_lord_house": 12,
"lagna_lord_condition": "normal"
},
"primary": "Blue Sapphire (Neelam)",
"substitutes": "Amethyst or Blue Topaz",
"uparatna": "Iolite, Lapis Lazuli or Blue Spinel",
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Prediction Report: Classical references
POSTAvailable
https://api.96astro.com/v1/predictions/prediction-classicsThe classical references section of the natal prediction report, derived from the Lagna, Moon nakshatra and planet placements.
- Credits
- 10 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response (JSON); PDF via /v1/jobs/pdf
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
section· stringayanamsha· objectnode· stringlagna· stringlagna_lord· stringmoon_nakshatra· stringhouses· array of objectyogas· objectjaimini· object
Example request
curl -X POST https://api.96astro.com/v1/predictions/prediction-classics \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/prediction-classics", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.predictionClassics({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/prediction-classics",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.prediction_classics({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/prediction-classics');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/prediction-classics", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"section": "classics",
"ayanamsha": {
"id": "lahiri"
},
"node": "true",
"lagna": "Capricorn",
"lagna_lord": "Saturn",
"moon_nakshatra": "Chitra",
"houses": [
{
"house": 1,
"name": "Tanu Bhava",
"significations": "physique, appearance, intellect (or the organ of intelligence, i.e. brain), complexion of the body, vigour; weakness, happiness, grief, and innate nature are all to be guessed through the ascending sign.",
"statements": [
{
"ref": "BP 12-1",
"text": "Physical comforts: The ascendant lord Saturn is in the 12th house (a dusthana). Physical felicity will diminish."
},
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Prediction Report: Life report
POSTAvailable
https://api.96astro.com/v1/predictions/prediction-life-reportThe life report section of the natal prediction report, derived from the Lagna, Moon nakshatra and planet placements.
- Credits
- 10 credits
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response (JSON); PDF via /v1/jobs/pdf
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
section· stringayanamsha· objectnode· stringlagna· stringlagna_lord· stringmoon_nakshatra· stringpersonality· objectmental· objectcareer· objectfinance· objectrelationships· objecthealth· objectspiritual· objectchildren· object
Example request
curl -X POST https://api.96astro.com/v1/predictions/prediction-life-report \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/prediction-life-report", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.predictionLifeReport({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/prediction-life-report",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.prediction_life_report({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/prediction-life-report');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/prediction-life-report", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"section": "life_report",
"ayanamsha": {
"id": "lahiri"
},
"node": "true",
"lagna": "Capricorn",
"lagna_lord": "Saturn",
"moon_nakshatra": "Chitra",
"personality": {
"basis": {
"lagna_sign": "Capricorn",
"lagna_lord": "Saturn",
"lagna_lord_house": 12
},
"paragraphs": [
"The native is born under an earth sign with Saturn as the ruling planet, giving a disciplined, ambitious and exceptionally patient personality. There is a natural gift for sustained effort, strategic planning and the gradual building of lasting structures. The native is responsible, practical and deeply committed to excellence and integrity in all endeavors. A serious demeanor and a strong work ethic distinguish this native in all professional and social contexts. Recognition and success come steadily through consistent effort over time.",
"The ascending sign Capricorn belongs to the earth element in its most disciplined, ambitious and achievement-oriented manifestation. Earth lagna natives of Capricorn have exceptional patience, strategic intelligence and the remarkable capacity for sustained effort over very long periods of time. The earth element in Capricorn creates a personality that is responsible, practically grounded and deeply committed to building structures of lasting value and substance. The native's greatest gifts are organizational discipline, patient determination and the wisdom to play the long game in all areas of life.",
"Capricorn is a movable or cardinal sign, giving the native significant executive initiative, strategic drive and the disciplined capacity to set ambitious long-term goals and move consistently toward them through sustained, structured effort. Cardinal-sign ascendants in Capricorn initiate through strategic planning, disciplined effort and the systematic construction of lasting achievement. The native is most vital when working toward clear, ambitious goals with patience and organisational precision."
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Vedic Transit (Gochara)
POSTAvailable
https://api.96astro.com/v1/predictions/vedic-transitBirth and transit positions side by side: the ascendant and each planet's sign, degree and nakshatra at birth and at the transit moment.
- Credits
- 1 credit
- Input
- Specific input
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
birthobjectRequired | |
birth.datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
birth.timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
birth.utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
birth.latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
birth.longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
birth.ayanamshastringOptional | Default: |
birth.languagestringOptional | Output language (ISO 639-1). Each capability lists the languages it supports. Default: |
transitobjectRequired | |
transit.datetimestringRequired | Local date and time, ISO 8601 without offset. Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
transit.timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
transit.utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
transit.latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
transit.longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
ayanamsha· objectnode· stringhouse_system· stringbirth· objecttransit· object
Example request
curl -X POST https://api.96astro.com/v1/predictions/vedic-transit \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"birth": {
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
},
"transit": {
"datetime": "2026-10-13T12:00:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}
}'const response = await fetch("https://api.96astro.com/v1/predictions/vedic-transit", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"birth": {
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
},
"transit": {
"datetime": "2026-10-13T12:00:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.vedicTransit({
"birth": {
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
},
"transit": {
"datetime": "2026-10-13T12:00:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/vedic-transit",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"birth": {
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
"transit": {
"datetime": "2026-10-13T12:00:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.vedic_transit({
"birth": {
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
"transit": {
"datetime": "2026-10-13T12:00:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/vedic-transit');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'birth' => [
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
],
'transit' => [
'datetime' => '2026-10-13T12:00:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
],
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"birth": {
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
},
"transit": {
"datetime": "2026-10-13T12:00:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/vedic-transit", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"ayanamsha": {
"id": "lahiri",
"degrees_at_birth": 23.7285
},
"node": "true",
"house_system": "whole_sign",
"birth": {
"datetime": "1990-10-18T14:30:00",
"ascendant": {
"sign": "Capricorn",
"sign_number": 10,
"sign_lord": "Saturn",
"degree": 23.8935,
"degree_dms": "23-53-37",
"longitude": 293.8935,
"nakshatra": "Dhanishta",
"nakshatra_number": 23,
"nakshatra_lord": "Mars",
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Navatara Chakra
POSTAvailable
https://api.96astro.com/v1/predictions/navataraThe nine taras counted from the birth nakshatra with each planet's tara placement.
- Credits
- 1 credit
- Input
- Birth details
- Output
- JSON
- Delivery
- Direct response
- Languages
- English; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
datetimestringRequired | Local date and time, ISO 8601 without offset, e.g. 1990-10-18T14:30:00 Limits: format local-date-time, pattern ^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(:\d{2}(\.\d{1,6})?)?$ Example: |
timezonestring | nullOptional | IANA time zone, e.g. Asia/Kolkata Default: Example: |
utc_offsetstring | nullOptional | Fixed offset such as +05:30, if no IANA zone is known Default: |
latitudenumberRequired | Limits: minimum -90, maximum 90 Example: |
longitudenumberRequired | Limits: minimum -180, maximum 180 Example: |
ayanamshastringOptional | Default: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed value: en |
nodestringOptional | Lunar node: true (osculating) or mean. Default: Allowed values: truemean |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
ayanamsha· stringjanma_nakshatra· objecttaras· array of objectplacements· array of object
Example request
curl -X POST https://api.96astro.com/v1/predictions/navatara \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}'const response = await fetch("https://api.96astro.com/v1/predictions/navatara", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.predictions.navatara({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/predictions/navatara",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.predictions.navatara({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/predictions/navatara');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'datetime' => '1990-10-18T14:30:00',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/predictions/navatara", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response
{
"data": {
"ayanamsha": "lahiri",
"janma_nakshatra": {
"name": "Chitra",
"number": 14,
"pada": 2
},
"taras": [
{
"number": 1,
"name": "Janma",
"nature": "Neutral / Tense",
"nakshatra_lord": "Mars",
"nakshatras": [
{
"cycle": 1,
"nakshatra": "Chitra",
"nakshatra_number": 14,
"bodies": [
…Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.