API reference / Numerology
Numerology
Chaldean/Vedic numerology, name numbers, day numbers and biorhythms.
5 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.
Numerology (in bundle)
POSTAvailable
https://api.96astro.com/v1/numerology/numerology-bundleRadical, destiny and name numbers, Lo Shu and Vedic grids, Kua number, personal cycles and remedies, from the name and birth date.
- 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 |
namestringRequired | Full name as used day to day. Limits: 1 to 120 characters Example: |
genderstringOptional | Default: Allowed values: malefemaleother 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.
key_details· objectradical_number· objectdestiny_number· objectname_number· objectloshu_grid· objectvedic_grid· objectkua_number· objectpersonal_cycles· objectcombination· objectauspicious_place_time· objecthealth_career· objectfasts_remedies· object
Example request
curl -X POST https://api.96astro.com/v1/numerology/numerology-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,
"name": "Asha Verma",
"gender": "female"
}'const response = await fetch("https://api.96astro.com/v1/numerology/numerology-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,
"name": "Asha Verma",
"gender": "female"
}),
});
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.numerology.numerologyBundle({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"name": "Asha Verma",
"gender": "female"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/numerology/numerology-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,
"name": "Asha Verma",
"gender": "female",
},
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.numerology.numerology_bundle({
"datetime": "1990-10-18T14:30:00",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"name": "Asha Verma",
"gender": "female",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/numerology/numerology-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,
'name' => 'Asha Verma',
'gender' => 'female',
]),
]);
$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,
"name": "Asha Verma",
"gender": "female"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/numerology/numerology-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": {
"key_details": {
"name": "Asha Verma",
"dob": "1990-10-18",
"gender": "female",
"radical_number": 9,
"destiny_number": 2,
"name_number": 1,
"ruling_planet": "Mars",
"favourable_signs": [
"Aries",
"Scorpio"
],
"favourable_alphabets": [
"I",
"R"
],
"gemstone": "Red Coral",
"gemstone_hindi": "Moonga",
…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.
Numerology
POSTAvailable
https://api.96astro.com/v1/numerology/numerologyRadical, destiny and name numbers with their planets and favourable details, Lo Shu and Vedic grids, Kua number, personal cycles, combinations, readings and remedies.
- Credits
- 1 credit
- Input
- Name
- 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 |
|---|---|
namestringRequired | Full name in Latin letters. Limits: 1 to 120 characters Example: |
date_of_birthstringRequired | Limits: format date Example: |
genderstring | nullOptional | Needed for the Kua number (null without it: the formula differs by gender). Default: Allowed values: malefemale 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.
name· stringdate_of_birth· stringsystem· stringradical_number· objectdestiny_number· objectname_number· objectlo_shu_grid· objectvedic_grid· objectkua_number· objectpersonal_cycles· objectcombination· objectreadings· objectremedies· array of string
Example request
curl -X POST https://api.96astro.com/v1/numerology/numerology \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Asha Sharma",
"date_of_birth": "1990-10-18",
"gender": "female"
}'const response = await fetch("https://api.96astro.com/v1/numerology/numerology", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "Asha Sharma",
"date_of_birth": "1990-10-18",
"gender": "female"
}),
});
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.numerology.numerology({
"name": "Asha Sharma",
"date_of_birth": "1990-10-18",
"gender": "female"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/numerology/numerology",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"name": "Asha Sharma",
"date_of_birth": "1990-10-18",
"gender": "female",
},
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.numerology.numerology({
"name": "Asha Sharma",
"date_of_birth": "1990-10-18",
"gender": "female",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/numerology/numerology');
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([
'name' => 'Asha Sharma',
'date_of_birth' => '1990-10-18',
'gender' => 'female',
]),
]);
$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(`{
"name": "Asha Sharma",
"date_of_birth": "1990-10-18",
"gender": "female"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/numerology/numerology", 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": {
"name": "Asha Sharma",
"date_of_birth": "1990-10-18",
"system": "Chaldean",
"radical_number": {
"number": 9,
"calculation": "Day 18 → 18 → 1+8 = 9",
"ruling_planet": "Mars",
"favourable_signs": [
"Aries",
"Scorpio"
],
"favourable_alphabets": [
"I",
"R"
],
"gemstone": "Red Coral",
"gemstone_hindi_name": "Moonga",
"gemstone_colors": [
…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.
Name Numerology
POSTAvailable
https://api.96astro.com/v1/numerology/name-numerologyChaldean letter values with the Expression, Soul Urge and Personality numbers from a name, and alternative name spellings.
- Credits
- 1 credit
- Input
- Name
- 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 |
|---|---|
namestringRequired | Full name in Latin letters. Limits: 1 to 120 characters Example: |
date_of_birthstring | nullOptional | Ranks name suggestions by friendliness to the radical number. Default: 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.
name· stringsystem· stringletter_values· array of objectcalculation· stringexpression· objectsoul_urge· objectpersonality· objectname_suggestions· array of object
Example request
curl -X POST https://api.96astro.com/v1/numerology/name-numerology \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Asha Sharma",
"date_of_birth": "1990-10-18"
}'const response = await fetch("https://api.96astro.com/v1/numerology/name-numerology", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "Asha Sharma",
"date_of_birth": "1990-10-18"
}),
});
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.numerology.nameNumerology({
"name": "Asha Sharma",
"date_of_birth": "1990-10-18"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/numerology/name-numerology",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"name": "Asha Sharma",
"date_of_birth": "1990-10-18",
},
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.numerology.name_numerology({
"name": "Asha Sharma",
"date_of_birth": "1990-10-18",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/numerology/name-numerology');
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([
'name' => 'Asha Sharma',
'date_of_birth' => '1990-10-18',
]),
]);
$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(`{
"name": "Asha Sharma",
"date_of_birth": "1990-10-18"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/numerology/name-numerology", 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": {
"name": "Asha Sharma",
"system": "Chaldean",
"letter_values": [
{
"letter": "A",
"value": 1
},
{
"letter": "S",
"value": 3
},
{
"letter": "H",
"value": 5
}
],
"calculation": "A(1)+S(3)+H(5)+A(1)+S(3)+H(5)+A(1)+R(2)+M(4)+A(1) = 26 → 2+6 = 8",
"expression": {
…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.
Day Number
POSTAvailable
https://api.96astro.com/v1/numerology/day-numberMoolank and Bhagyank of a date with their planets and traits, the compound number, and a lucky day, number and colour.
- Credits
- 1 credit
- Input
- Date
- 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 | Usually a birth date, 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.
date· stringmoolank· objectbhagyank· objectcompound_number· integerlucky_day· stringlucky_number· integerlucky_colour· string
Example request
curl -X POST https://api.96astro.com/v1/numerology/day-number \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"date": "1990-10-18"
}'const response = await fetch("https://api.96astro.com/v1/numerology/day-number", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"date": "1990-10-18"
}),
});
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.numerology.dayNumber({
"date": "1990-10-18"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/numerology/day-number",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"date": "1990-10-18",
},
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.numerology.day_number({
"date": "1990-10-18",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/numerology/day-number');
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' => '1990-10-18',
]),
]);
$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": "1990-10-18"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/numerology/day-number", 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": "1990-10-18",
"moolank": {
"number": 9,
"planet": "Mars",
"traits": "Courage, determination, leadership, energy"
},
"bhagyank": {
"number": 2,
"planet": "Moon",
"traits": "Sensitivity, intuition, cooperation, adaptability"
},
"compound_number": 11,
"lucky_day": "Tuesday",
"lucky_number": 9,
"lucky_colour": "Red / Crimson"
},
"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.
Biorhythm
POSTAvailable
https://api.96astro.com/v1/numerology/biorhythmPhysical, emotional and intellectual cycle values and phases for a date, a composite, a day-by-day series around it and the critical days.
- Credits
- 1 credit
- Input
- Date
- 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 |
|---|---|
birth_datestringRequired | Limits: format date Example: |
datestringRequired | The day to read, YYYY-MM-DD. Limits: format date Example: |
window_daysintegerOptional | Days on each side of `date` in the series. Default: Limits: minimum 0, maximum 60 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_date· stringdate· stringdays_since_birth· integercycles· array of objectcomposite· objectseries· array of objectcritical_days· array of string
Example request
curl -X POST https://api.96astro.com/v1/numerology/biorhythm \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"birth_date": "1990-10-18",
"date": "2026-10-13",
"window_days": 7
}'const response = await fetch("https://api.96astro.com/v1/numerology/biorhythm", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"birth_date": "1990-10-18",
"date": "2026-10-13",
"window_days": 7
}),
});
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.numerology.biorhythm({
"birth_date": "1990-10-18",
"date": "2026-10-13",
"window_days": 7
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/numerology/biorhythm",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"birth_date": "1990-10-18",
"date": "2026-10-13",
"window_days": 7,
},
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.numerology.biorhythm({
"birth_date": "1990-10-18",
"date": "2026-10-13",
"window_days": 7,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/numerology/biorhythm');
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_date' => '1990-10-18',
'date' => '2026-10-13',
'window_days' => 7,
]),
]);
$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_date": "1990-10-18",
"date": "2026-10-13",
"window_days": 7
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/numerology/biorhythm", 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_date": "1990-10-18",
"date": "2026-10-13",
"days_since_birth": 13144,
"cycles": [
{
"cycle": "physical",
"period_days": 23,
"value": 0.1362,
"percent": 56.8,
"phase": "Positive",
"about": "Controls your physical strength, endurance, coordination, and overall bodily energy.",
"phase_description": "Moderate positive phase. Slightly above baseline."
},
{
"cycle": "emotional",
"period_days": 28,
"value": 0.4339,
"percent": 71.7,
…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.