API reference / Vastu
Vastu
Floor-plan Vastu analysis, Ayadi, comparisons, heatmaps and reference tables.
10 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.
Vastu Floor Analysis
POSTBeta
https://api.96astro.com/v1/vastu/vastu-analyseVastu analysis of one floor from its marked-up plan: overall and category scores, zones, rooms, brahmasthan, marma, devatas, defects with remedies, Ayadi and a checklist.
- Credits
- 3 credits
- 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 |
|---|---|
boundaryarray of [number, number]Required | The property outline, in order round the shape. Limits: 3 to 500 items |
northobjectOptional | |
north.degreesnumberOptional | Bearing of north, clockwise from the top of the plan (smaller y): 0 = north is up, 90 = north is right. Default: Limits: minimum 0, less than 360 Example: |
north.referencestringOptional | What the reading is relative to. A magnetic reading with a site is corrected to true north. Default: Allowed values: magnetictrueunknown Example: |
north.declination_degreesnumber | nullOptional | Magnetic declination, east positive. Default: Limits: minimum -90, maximum 90 |
north.uncertainty_degreesnumber | nullOptional | How far the reading may be off. Default: Limits: minimum 0, maximum 45 |
north.measured_onstring | nullOptional | Day the reading was taken (for the declination model). Default: Limits: format date |
north.siteobject | nullOptional | Where the property is; used to look up the declination. Default: |
north.site.latitudenumberRequired | Limits: minimum -90, maximum 90 |
north.site.longitudenumberRequired | Limits: minimum -180, maximum 180 |
unitsstring | nullOptional | The unit the coordinates are in, if they are real lengths. Default: Allowed values: mcmmmftinyd Example: |
scaleobject | nullOptional | For a drawing in pixels: a length on the plan and its real length. Default: |
scale.plan_lengthnumberRequired | A length measured on the plan, in plan coordinates. Limits: greater than 0, maximum 2000000 |
scale.real_lengthnumberRequired | What that length is in reality. Limits: greater than 0, maximum 100000 |
scale.unitstringRequired | Allowed values: mcmmmftinyd |
centre[number, number] | nullOptional | The plan's centre (Brahmasthan); defaults to the centre of the outline's bounding box. Default: Limits: exactly 2 items |
roomsarray of objectsOptional | Limits: at most 80 items |
rooms[].namestringRequired | Limits: 1 to 120 characters Example: |
rooms[].typestring | nullOptional | Room use; omitted = untyped (reported, not scored). Default: Allowed values: kitchenmaster_bedroomchildren_bedroomguest_bedroompoojatoiletbathroomstudyliving_roomdiningstore_roomstairsmain_entrancewater_tank_undergroundwater_tank_overheadswimming_poolseptic_tankborewellgaragebalconycorridor Example: |
rooms[].polygonarray of [number, number]Required | Limits: 3 to 200 items |
structuresarray of objectsOptional | Limits: at most 80 items |
structures[].namestringRequired | Limits: 1 to 120 characters |
structures[].typestringRequired | Allowed values: pillarstaircaseliftmachinekitchen_pitbeamwallstairsmain_entrancewater_tank_undergroundwater_tank_overheadseptic_tankborewell |
structures[].polygonarray of [number, number]Required | Limits: 3 to 200 items |
fixturesarray of objectsOptional | Limits: at most 50 items |
fixtures[].namestringOptional | Default: Limits: at most 120 characters |
fixtures[].typestringRequired | Allowed values: bedstovedesksafewc |
fixtures[].position[number, number]Required | Limits: exactly 2 items |
fixtures[].toward[number, number]Required | A second point in the direction the fixture faces (bed: where the head rests). Limits: exactly 2 items |
holesarray of objectsOptional | Open courtyards and cut-outs. Limits: at most 20 items |
holes[].namestringOptional | Default: Limits: at most 120 characters |
holes[].kindstringRequired | Allowed values: courtyardcutout |
holes[].polygonarray of [number, number]Required | Limits: 3 to 200 items |
ayadiobject | nullOptional | Ayadi options; Ayadi needs units or a scale. Default: |
ayadi.unitstringOptional | Default: Allowed values: kishku_hastakerala_kolcustom |
ayadi.custom_unit_metresnumber | nullOptional | Default: Limits: minimum 0.1, maximum 2 |
ayadi.owner_nakshatrastring | nullOptional | Owner's birth star; enables Tara-bala. Default: Allowed values: AshwiniBharaniKrittikaRohiniMrigashiraArdraPunarvasuPushyaAshleshaMaghaPurva PhalguniUttara PhalguniHastaChitraSwatiVishakhaAnuradhaJyeshthaMulaPurva AshadhaUttara AshadhaShravanaDhanishtaShatabhishaPurva BhadrapadaUttara BhadrapadaRevati |
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.
overall_score· numberscore_status· stringscore_basis· objectdefect_count· integersevere_defect_count· integerscoring_method· objectnorth· objectplot· objectcategory_scores· objectzones· array of objectrooms· array of objectstructures· arraybrahmasthan· objectmarma· objectdevatas· array of objectcut_zones· arraydefects· array of objectremedies· array of objectsacred_objects· objectmantras· objectchecklist· objectorientation· objectayadi· objectduplicates_merged· integershape_warnings· array
Example request
curl -X POST https://api.96astro.com/v1/vastu/vastu-analyse \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"units": "m",
"north": {
"degrees": 0,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
]
}'const response = await fetch("https://api.96astro.com/v1/vastu/vastu-analyse", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"units": "m",
"north": {
"degrees": 0,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
]
}),
});
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.vastu.vastuAnalyse({
"units": "m",
"north": {
"degrees": 0,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
]
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/vastu/vastu-analyse",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"units": "m",
"north": {
"degrees": 0,
"reference": "true",
},
"boundary": [
[
0,
0,
],
[
12,
0,
],
[
12,
9,
],
[
0,
9,
],
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6,
],
[
12,
6,
],
[
12,
9,
],
[
9,
9,
],
],
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5,
],
[
4,
5,
],
[
4,
9,
],
[
0,
9,
],
],
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0,
],
[
12,
0,
],
[
12,
2,
],
[
10,
2,
],
],
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0,
],
[
7,
0,
],
[
7,
1,
],
[
5,
1,
],
],
},
],
},
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.vastu.vastu_analyse({
"units": "m",
"north": {
"degrees": 0,
"reference": "true",
},
"boundary": [
[
0,
0,
],
[
12,
0,
],
[
12,
9,
],
[
0,
9,
],
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6,
],
[
12,
6,
],
[
12,
9,
],
[
9,
9,
],
],
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5,
],
[
4,
5,
],
[
4,
9,
],
[
0,
9,
],
],
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0,
],
[
12,
0,
],
[
12,
2,
],
[
10,
2,
],
],
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0,
],
[
7,
0,
],
[
7,
1,
],
[
5,
1,
],
],
},
],
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/vastu/vastu-analyse');
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([
'units' => 'm',
'north' => [
'degrees' => 0,
'reference' => 'true',
],
'boundary' => [
[
0,
0,
],
[
12,
0,
],
[
12,
9,
],
[
0,
9,
],
],
'rooms' => [
[
'name' => 'Kitchen',
'type' => 'kitchen',
'polygon' => [
[
9,
6,
],
[
12,
6,
],
[
12,
9,
],
[
9,
9,
],
],
],
[
'name' => 'Master bedroom',
'type' => 'master_bedroom',
'polygon' => [
[
0,
5,
],
[
4,
5,
],
[
4,
9,
],
[
0,
9,
],
],
],
[
'name' => 'Pooja',
'type' => 'pooja',
'polygon' => [
[
10,
0,
],
[
12,
0,
],
[
12,
2,
],
[
10,
2,
],
],
],
[
'name' => 'Entrance',
'type' => 'main_entrance',
'polygon' => [
[
5,
0,
],
[
7,
0,
],
[
7,
1,
],
[
5,
1,
],
],
],
],
]),
]);
$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(`{
"units": "m",
"north": {
"degrees": 0,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
]
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/vastu/vastu-analyse", 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": {
"overall_score": 61,
"score_status": "assessed",
"score_basis": {
"coverage_pct": 61.1,
"checks_assessed": 11,
"checks_not_assessed": 7,
"missing": [
"a toilet or bathroom"
],
"threshold_pct": 50,
"explanation": "Based on 61.1% of the automatic checks."
},
"defect_count": 2,
"severe_defect_count": 1,
"scoring_method": {
"version": "2.1",
"room_zones": "area share in each of the 16 zones; the primary zone holds the most floor",
"room_score": "rule score per zone weighted by floor share; parts under 15% of the room are left out",
…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.
Vastu Category Heatmap
POSTBeta
https://api.96astro.com/v1/vastu/vastu-heatmapSampled points across the floor, each scored for one life goal with its zone.
- Credits
- 3 credits
- 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 |
|---|---|
boundaryarray of [number, number]Required | The property outline, in order round the shape. Limits: 3 to 500 items |
northobjectOptional | |
north.degreesnumberOptional | Bearing of north, clockwise from the top of the plan (smaller y): 0 = north is up, 90 = north is right. Default: Limits: minimum 0, less than 360 Example: |
north.referencestringOptional | What the reading is relative to. A magnetic reading with a site is corrected to true north. Default: Allowed values: magnetictrueunknown Example: |
north.declination_degreesnumber | nullOptional | Magnetic declination, east positive. Default: Limits: minimum -90, maximum 90 |
north.uncertainty_degreesnumber | nullOptional | How far the reading may be off. Default: Limits: minimum 0, maximum 45 |
north.measured_onstring | nullOptional | Day the reading was taken (for the declination model). Default: Limits: format date |
north.siteobject | nullOptional | Where the property is; used to look up the declination. Default: |
north.site.latitudenumberRequired | Limits: minimum -90, maximum 90 |
north.site.longitudenumberRequired | Limits: minimum -180, maximum 180 |
unitsstring | nullOptional | The unit the coordinates are in, if they are real lengths. Default: Allowed values: mcmmmftinyd Example: |
scaleobject | nullOptional | For a drawing in pixels: a length on the plan and its real length. Default: |
scale.plan_lengthnumberRequired | A length measured on the plan, in plan coordinates. Limits: greater than 0, maximum 2000000 |
scale.real_lengthnumberRequired | What that length is in reality. Limits: greater than 0, maximum 100000 |
scale.unitstringRequired | Allowed values: mcmmmftinyd |
centre[number, number] | nullOptional | The plan's centre (Brahmasthan); defaults to the centre of the outline's bounding box. Default: Limits: exactly 2 items |
roomsarray of objectsOptional | Limits: at most 80 items |
rooms[].namestringRequired | Limits: 1 to 120 characters Example: |
rooms[].typestring | nullOptional | Room use; omitted = untyped (reported, not scored). Default: Allowed values: kitchenmaster_bedroomchildren_bedroomguest_bedroompoojatoiletbathroomstudyliving_roomdiningstore_roomstairsmain_entrancewater_tank_undergroundwater_tank_overheadswimming_poolseptic_tankborewellgaragebalconycorridor Example: |
rooms[].polygonarray of [number, number]Required | Limits: 3 to 200 items |
structuresarray of objectsOptional | Limits: at most 80 items |
structures[].namestringRequired | Limits: 1 to 120 characters |
structures[].typestringRequired | Allowed values: pillarstaircaseliftmachinekitchen_pitbeamwallstairsmain_entrancewater_tank_undergroundwater_tank_overheadseptic_tankborewell |
structures[].polygonarray of [number, number]Required | Limits: 3 to 200 items |
fixturesarray of objectsOptional | Limits: at most 50 items |
fixtures[].namestringOptional | Default: Limits: at most 120 characters |
fixtures[].typestringRequired | Allowed values: bedstovedesksafewc |
fixtures[].position[number, number]Required | Limits: exactly 2 items |
fixtures[].toward[number, number]Required | A second point in the direction the fixture faces (bed: where the head rests). Limits: exactly 2 items |
holesarray of objectsOptional | Open courtyards and cut-outs. Limits: at most 20 items |
holes[].namestringOptional | Default: Limits: at most 120 characters |
holes[].kindstringRequired | Allowed values: courtyardcutout |
holes[].polygonarray of [number, number]Required | Limits: 3 to 200 items |
ayadiobject | nullOptional | Ayadi options; Ayadi needs units or a scale. Default: |
ayadi.unitstringOptional | Default: Allowed values: kishku_hastakerala_kolcustom |
ayadi.custom_unit_metresnumber | nullOptional | Default: Limits: minimum 0.1, maximum 2 |
ayadi.owner_nakshatrastring | nullOptional | Owner's birth star; enables Tara-bala. Default: Allowed values: AshwiniBharaniKrittikaRohiniMrigashiraArdraPunarvasuPushyaAshleshaMaghaPurva PhalguniUttara PhalguniHastaChitraSwatiVishakhaAnuradhaJyeshthaMulaPurva AshadhaUttara AshadhaShravanaDhanishtaShatabhishaPurva BhadrapadaUttara BhadrapadaRevati |
categorystringRequired | Life goal to weight the field for. Allowed values: careermarriagewealthspiritualhealtheducationpeacechildrenpropertyromancefameforeigntravelpoliticsarts 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 |
|---|---|
career | Career |
marriage | Marriage |
wealth | Wealth |
spiritual | Spiritual |
health | Health |
education | Education |
peace | Peace of mind |
children | Children |
property | Property |
romance | Romance |
fame | Fame |
foreign | Foreign settlement |
travel | Travel |
politics | Politics |
arts | Arts |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
category· stringgrid_size· integerbbox· array of numbersamples· array of objectbasis· string
Example request
curl -X POST https://api.96astro.com/v1/vastu/vastu-heatmap \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"units": "m",
"north": {
"degrees": 0,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
],
"category": "career"
}'const response = await fetch("https://api.96astro.com/v1/vastu/vastu-heatmap", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"units": "m",
"north": {
"degrees": 0,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
],
"category": "career"
}),
});
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.vastu.vastuHeatmap({
"units": "m",
"north": {
"degrees": 0,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
],
"category": "career"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/vastu/vastu-heatmap",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"units": "m",
"north": {
"degrees": 0,
"reference": "true",
},
"boundary": [
[
0,
0,
],
[
12,
0,
],
[
12,
9,
],
[
0,
9,
],
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6,
],
[
12,
6,
],
[
12,
9,
],
[
9,
9,
],
],
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5,
],
[
4,
5,
],
[
4,
9,
],
[
0,
9,
],
],
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0,
],
[
12,
0,
],
[
12,
2,
],
[
10,
2,
],
],
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0,
],
[
7,
0,
],
[
7,
1,
],
[
5,
1,
],
],
},
],
"category": "career",
},
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.vastu.vastu_heatmap({
"units": "m",
"north": {
"degrees": 0,
"reference": "true",
},
"boundary": [
[
0,
0,
],
[
12,
0,
],
[
12,
9,
],
[
0,
9,
],
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6,
],
[
12,
6,
],
[
12,
9,
],
[
9,
9,
],
],
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5,
],
[
4,
5,
],
[
4,
9,
],
[
0,
9,
],
],
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0,
],
[
12,
0,
],
[
12,
2,
],
[
10,
2,
],
],
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0,
],
[
7,
0,
],
[
7,
1,
],
[
5,
1,
],
],
},
],
"category": "career",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/vastu/vastu-heatmap');
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([
'units' => 'm',
'north' => [
'degrees' => 0,
'reference' => 'true',
],
'boundary' => [
[
0,
0,
],
[
12,
0,
],
[
12,
9,
],
[
0,
9,
],
],
'rooms' => [
[
'name' => 'Kitchen',
'type' => 'kitchen',
'polygon' => [
[
9,
6,
],
[
12,
6,
],
[
12,
9,
],
[
9,
9,
],
],
],
[
'name' => 'Master bedroom',
'type' => 'master_bedroom',
'polygon' => [
[
0,
5,
],
[
4,
5,
],
[
4,
9,
],
[
0,
9,
],
],
],
[
'name' => 'Pooja',
'type' => 'pooja',
'polygon' => [
[
10,
0,
],
[
12,
0,
],
[
12,
2,
],
[
10,
2,
],
],
],
[
'name' => 'Entrance',
'type' => 'main_entrance',
'polygon' => [
[
5,
0,
],
[
7,
0,
],
[
7,
1,
],
[
5,
1,
],
],
],
],
'category' => 'career',
]),
]);
$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(`{
"units": "m",
"north": {
"degrees": 0,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
],
"category": "career"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/vastu/vastu-heatmap", 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": {
"category": "career",
"grid_size": 24,
"bbox": [
0,
0,
12
],
"samples": [
{
"point": [
0,
0
],
"score": 75,
"zone": "NW"
},
{
"point": [
…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.
Compare Two Properties
POSTBeta
https://api.96astro.com/v1/vastu/vastu-compareTwo plans analysed side by side: each one's scores and defects, the winner per category with reasons, and the overall winner.
- Credits
- 3 credits
- 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 |
|---|---|
aobjectRequired | |
a.boundaryarray of [number, number]Required | The property outline, in order round the shape. Limits: 3 to 500 items |
a.northobjectOptional | |
a.north.degreesnumberOptional | Bearing of north, clockwise from the top of the plan (smaller y): 0 = north is up, 90 = north is right. Default: Limits: minimum 0, less than 360 Example: |
a.north.referencestringOptional | What the reading is relative to. A magnetic reading with a site is corrected to true north. Default: Allowed values: magnetictrueunknown Example: |
a.north.declination_degreesnumber | nullOptional | Magnetic declination, east positive. Default: Limits: minimum -90, maximum 90 |
a.north.uncertainty_degreesnumber | nullOptional | How far the reading may be off. Default: Limits: minimum 0, maximum 45 |
a.north.measured_onstring | nullOptional | Day the reading was taken (for the declination model). Default: Limits: format date |
a.north.siteobject | nullOptional | Where the property is; used to look up the declination. Default: |
a.north.site.latitudenumberRequired | Limits: minimum -90, maximum 90 |
a.north.site.longitudenumberRequired | Limits: minimum -180, maximum 180 |
a.unitsstring | nullOptional | The unit the coordinates are in, if they are real lengths. Default: Allowed values: mcmmmftinyd Example: |
a.scaleobject | nullOptional | For a drawing in pixels: a length on the plan and its real length. Default: |
a.scale.plan_lengthnumberRequired | A length measured on the plan, in plan coordinates. Limits: greater than 0, maximum 2000000 |
a.scale.real_lengthnumberRequired | What that length is in reality. Limits: greater than 0, maximum 100000 |
a.scale.unitstringRequired | Allowed values: mcmmmftinyd |
a.centre[number, number] | nullOptional | The plan's centre (Brahmasthan); defaults to the centre of the outline's bounding box. Default: Limits: exactly 2 items |
a.roomsarray of objectsOptional | Limits: at most 80 items |
a.rooms[].namestringRequired | Limits: 1 to 120 characters Example: |
a.rooms[].typestring | nullOptional | Room use; omitted = untyped (reported, not scored). Default: Allowed values: kitchenmaster_bedroomchildren_bedroomguest_bedroompoojatoiletbathroomstudyliving_roomdiningstore_roomstairsmain_entrancewater_tank_undergroundwater_tank_overheadswimming_poolseptic_tankborewellgaragebalconycorridor Example: |
a.rooms[].polygonarray of [number, number]Required | Limits: 3 to 200 items |
a.structuresarray of objectsOptional | Limits: at most 80 items |
a.structures[].namestringRequired | Limits: 1 to 120 characters |
a.structures[].typestringRequired | Allowed values: pillarstaircaseliftmachinekitchen_pitbeamwallstairsmain_entrancewater_tank_undergroundwater_tank_overheadseptic_tankborewell |
a.structures[].polygonarray of [number, number]Required | Limits: 3 to 200 items |
a.fixturesarray of objectsOptional | Limits: at most 50 items |
a.fixtures[].namestringOptional | Default: Limits: at most 120 characters |
a.fixtures[].typestringRequired | Allowed values: bedstovedesksafewc |
a.fixtures[].position[number, number]Required | Limits: exactly 2 items |
a.fixtures[].toward[number, number]Required | A second point in the direction the fixture faces (bed: where the head rests). Limits: exactly 2 items |
a.holesarray of objectsOptional | Open courtyards and cut-outs. Limits: at most 20 items |
a.holes[].namestringOptional | Default: Limits: at most 120 characters |
a.holes[].kindstringRequired | Allowed values: courtyardcutout |
a.holes[].polygonarray of [number, number]Required | Limits: 3 to 200 items |
a.ayadiobject | nullOptional | Ayadi options; Ayadi needs units or a scale. Default: |
a.ayadi.unitstringOptional | Default: Allowed values: kishku_hastakerala_kolcustom |
a.ayadi.custom_unit_metresnumber | nullOptional | Default: Limits: minimum 0.1, maximum 2 |
a.ayadi.owner_nakshatrastring | nullOptional | Owner's birth star; enables Tara-bala. Default: Allowed values: AshwiniBharaniKrittikaRohiniMrigashiraArdraPunarvasuPushyaAshleshaMaghaPurva PhalguniUttara PhalguniHastaChitraSwatiVishakhaAnuradhaJyeshthaMulaPurva AshadhaUttara AshadhaShravanaDhanishtaShatabhishaPurva BhadrapadaUttara BhadrapadaRevati |
bobjectRequired | |
b.boundaryarray of [number, number]Required | The property outline, in order round the shape. Limits: 3 to 500 items |
b.northobjectOptional | |
b.north.degreesnumberOptional | Bearing of north, clockwise from the top of the plan (smaller y): 0 = north is up, 90 = north is right. Default: Limits: minimum 0, less than 360 Example: |
b.north.referencestringOptional | What the reading is relative to. A magnetic reading with a site is corrected to true north. Default: Allowed values: magnetictrueunknown Example: |
b.north.declination_degreesnumber | nullOptional | Magnetic declination, east positive. Default: Limits: minimum -90, maximum 90 |
b.north.uncertainty_degreesnumber | nullOptional | How far the reading may be off. Default: Limits: minimum 0, maximum 45 |
b.north.measured_onstring | nullOptional | Day the reading was taken (for the declination model). Default: Limits: format date |
b.north.siteobject | nullOptional | Where the property is; used to look up the declination. Default: |
b.north.site.latitudenumberRequired | Limits: minimum -90, maximum 90 |
b.north.site.longitudenumberRequired | Limits: minimum -180, maximum 180 |
b.unitsstring | nullOptional | The unit the coordinates are in, if they are real lengths. Default: Allowed values: mcmmmftinyd Example: |
b.scaleobject | nullOptional | For a drawing in pixels: a length on the plan and its real length. Default: |
b.scale.plan_lengthnumberRequired | A length measured on the plan, in plan coordinates. Limits: greater than 0, maximum 2000000 |
b.scale.real_lengthnumberRequired | What that length is in reality. Limits: greater than 0, maximum 100000 |
b.scale.unitstringRequired | Allowed values: mcmmmftinyd |
b.centre[number, number] | nullOptional | The plan's centre (Brahmasthan); defaults to the centre of the outline's bounding box. Default: Limits: exactly 2 items |
b.roomsarray of objectsOptional | Limits: at most 80 items |
b.rooms[].namestringRequired | Limits: 1 to 120 characters Example: |
b.rooms[].typestring | nullOptional | Room use; omitted = untyped (reported, not scored). Default: Allowed values: kitchenmaster_bedroomchildren_bedroomguest_bedroompoojatoiletbathroomstudyliving_roomdiningstore_roomstairsmain_entrancewater_tank_undergroundwater_tank_overheadswimming_poolseptic_tankborewellgaragebalconycorridor Example: |
b.rooms[].polygonarray of [number, number]Required | Limits: 3 to 200 items |
b.structuresarray of objectsOptional | Limits: at most 80 items |
b.structures[].namestringRequired | Limits: 1 to 120 characters |
b.structures[].typestringRequired | Allowed values: pillarstaircaseliftmachinekitchen_pitbeamwallstairsmain_entrancewater_tank_undergroundwater_tank_overheadseptic_tankborewell |
b.structures[].polygonarray of [number, number]Required | Limits: 3 to 200 items |
b.fixturesarray of objectsOptional | Limits: at most 50 items |
b.fixtures[].namestringOptional | Default: Limits: at most 120 characters |
b.fixtures[].typestringRequired | Allowed values: bedstovedesksafewc |
b.fixtures[].position[number, number]Required | Limits: exactly 2 items |
b.fixtures[].toward[number, number]Required | A second point in the direction the fixture faces (bed: where the head rests). Limits: exactly 2 items |
b.holesarray of objectsOptional | Open courtyards and cut-outs. Limits: at most 20 items |
b.holes[].namestringOptional | Default: Limits: at most 120 characters |
b.holes[].kindstringRequired | Allowed values: courtyardcutout |
b.holes[].polygonarray of [number, number]Required | Limits: 3 to 200 items |
b.ayadiobject | nullOptional | Ayadi options; Ayadi needs units or a scale. Default: |
b.ayadi.unitstringOptional | Default: Allowed values: kishku_hastakerala_kolcustom |
b.ayadi.custom_unit_metresnumber | nullOptional | Default: Limits: minimum 0.1, maximum 2 |
b.ayadi.owner_nakshatrastring | nullOptional | Owner's birth star; enables Tara-bala. Default: Allowed values: AshwiniBharaniKrittikaRohiniMrigashiraArdraPunarvasuPushyaAshleshaMaghaPurva PhalguniUttara PhalguniHastaChitraSwatiVishakhaAnuradhaJyeshthaMulaPurva AshadhaUttara AshadhaShravanaDhanishtaShatabhishaPurva BhadrapadaUttara BhadrapadaRevati |
name_astringOptional | Default: Limits: 1 to 60 characters Example: |
name_bstringOptional | Default: Limits: 1 to 60 characters 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_a· stringname_b· stringa· objectb· objectoverall_winner· stringverdict· stringcategories· array of objectcategory_summary· objectprovisional· booleanscoring_method· object
Example request
curl -X POST https://api.96astro.com/v1/vastu/vastu-compare \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name_a": "Corner flat",
"name_b": "Garden flat",
"a": {
"units": "m",
"north": {
"degrees": 0,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
]
},
"b": {
"units": "m",
"north": {
"degrees": 180,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
]
}
}'const response = await fetch("https://api.96astro.com/v1/vastu/vastu-compare", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"name_a": "Corner flat",
"name_b": "Garden flat",
"a": {
"units": "m",
"north": {
"degrees": 0,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
]
},
"b": {
"units": "m",
"north": {
"degrees": 180,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
]
}
}),
});
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.vastu.vastuCompare({
"name_a": "Corner flat",
"name_b": "Garden flat",
"a": {
"units": "m",
"north": {
"degrees": 0,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
]
},
"b": {
"units": "m",
"north": {
"degrees": 180,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
]
}
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/vastu/vastu-compare",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"name_a": "Corner flat",
"name_b": "Garden flat",
"a": {
"units": "m",
"north": {
"degrees": 0,
"reference": "true",
},
"boundary": [
[
0,
0,
],
[
12,
0,
],
[
12,
9,
],
[
0,
9,
],
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6,
],
[
12,
6,
],
[
12,
9,
],
[
9,
9,
],
],
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5,
],
[
4,
5,
],
[
4,
9,
],
[
0,
9,
],
],
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0,
],
[
12,
0,
],
[
12,
2,
],
[
10,
2,
],
],
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0,
],
[
7,
0,
],
[
7,
1,
],
[
5,
1,
],
],
},
],
},
"b": {
"units": "m",
"north": {
"degrees": 180,
"reference": "true",
},
"boundary": [
[
0,
0,
],
[
12,
0,
],
[
12,
9,
],
[
0,
9,
],
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6,
],
[
12,
6,
],
[
12,
9,
],
[
9,
9,
],
],
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5,
],
[
4,
5,
],
[
4,
9,
],
[
0,
9,
],
],
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0,
],
[
12,
0,
],
[
12,
2,
],
[
10,
2,
],
],
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0,
],
[
7,
0,
],
[
7,
1,
],
[
5,
1,
],
],
},
],
},
},
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.vastu.vastu_compare({
"name_a": "Corner flat",
"name_b": "Garden flat",
"a": {
"units": "m",
"north": {
"degrees": 0,
"reference": "true",
},
"boundary": [
[
0,
0,
],
[
12,
0,
],
[
12,
9,
],
[
0,
9,
],
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6,
],
[
12,
6,
],
[
12,
9,
],
[
9,
9,
],
],
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5,
],
[
4,
5,
],
[
4,
9,
],
[
0,
9,
],
],
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0,
],
[
12,
0,
],
[
12,
2,
],
[
10,
2,
],
],
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0,
],
[
7,
0,
],
[
7,
1,
],
[
5,
1,
],
],
},
],
},
"b": {
"units": "m",
"north": {
"degrees": 180,
"reference": "true",
},
"boundary": [
[
0,
0,
],
[
12,
0,
],
[
12,
9,
],
[
0,
9,
],
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6,
],
[
12,
6,
],
[
12,
9,
],
[
9,
9,
],
],
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5,
],
[
4,
5,
],
[
4,
9,
],
[
0,
9,
],
],
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0,
],
[
12,
0,
],
[
12,
2,
],
[
10,
2,
],
],
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0,
],
[
7,
0,
],
[
7,
1,
],
[
5,
1,
],
],
},
],
},
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/vastu/vastu-compare');
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_a' => 'Corner flat',
'name_b' => 'Garden flat',
'a' => [
'units' => 'm',
'north' => [
'degrees' => 0,
'reference' => 'true',
],
'boundary' => [
[
0,
0,
],
[
12,
0,
],
[
12,
9,
],
[
0,
9,
],
],
'rooms' => [
[
'name' => 'Kitchen',
'type' => 'kitchen',
'polygon' => [
[
9,
6,
],
[
12,
6,
],
[
12,
9,
],
[
9,
9,
],
],
],
[
'name' => 'Master bedroom',
'type' => 'master_bedroom',
'polygon' => [
[
0,
5,
],
[
4,
5,
],
[
4,
9,
],
[
0,
9,
],
],
],
[
'name' => 'Pooja',
'type' => 'pooja',
'polygon' => [
[
10,
0,
],
[
12,
0,
],
[
12,
2,
],
[
10,
2,
],
],
],
[
'name' => 'Entrance',
'type' => 'main_entrance',
'polygon' => [
[
5,
0,
],
[
7,
0,
],
[
7,
1,
],
[
5,
1,
],
],
],
],
],
'b' => [
'units' => 'm',
'north' => [
'degrees' => 180,
'reference' => 'true',
],
'boundary' => [
[
0,
0,
],
[
12,
0,
],
[
12,
9,
],
[
0,
9,
],
],
'rooms' => [
[
'name' => 'Kitchen',
'type' => 'kitchen',
'polygon' => [
[
9,
6,
],
[
12,
6,
],
[
12,
9,
],
[
9,
9,
],
],
],
[
'name' => 'Master bedroom',
'type' => 'master_bedroom',
'polygon' => [
[
0,
5,
],
[
4,
5,
],
[
4,
9,
],
[
0,
9,
],
],
],
[
'name' => 'Pooja',
'type' => 'pooja',
'polygon' => [
[
10,
0,
],
[
12,
0,
],
[
12,
2,
],
[
10,
2,
],
],
],
[
'name' => 'Entrance',
'type' => 'main_entrance',
'polygon' => [
[
5,
0,
],
[
7,
0,
],
[
7,
1,
],
[
5,
1,
],
],
],
],
],
]),
]);
$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_a": "Corner flat",
"name_b": "Garden flat",
"a": {
"units": "m",
"north": {
"degrees": 0,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
]
},
"b": {
"units": "m",
"north": {
"degrees": 180,
"reference": "true"
},
"boundary": [
[
0,
0
],
[
12,
0
],
[
12,
9
],
[
0,
9
]
],
"rooms": [
{
"name": "Kitchen",
"type": "kitchen",
"polygon": [
[
9,
6
],
[
12,
6
],
[
12,
9
],
[
9,
9
]
]
},
{
"name": "Master bedroom",
"type": "master_bedroom",
"polygon": [
[
0,
5
],
[
4,
5
],
[
4,
9
],
[
0,
9
]
]
},
{
"name": "Pooja",
"type": "pooja",
"polygon": [
[
10,
0
],
[
12,
0
],
[
12,
2
],
[
10,
2
]
]
},
{
"name": "Entrance",
"type": "main_entrance",
"polygon": [
[
5,
0
],
[
7,
0
],
[
7,
1
],
[
5,
1
]
]
}
]
}
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/vastu/vastu-compare", 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_a": "Corner flat",
"name_b": "Garden flat",
"a": {
"overall_score": 61,
"score_status": "assessed",
"coverage_pct": 61.1,
"defect_count": 2,
"severe_defect_count": 1,
"brahmasthan_score": 100,
"brahmasthan_openness_pct": 100,
"plot_shape": "rectangular"
},
"b": {
"overall_score": 42.7,
"score_status": "assessed",
"coverage_pct": 61.1,
"defect_count": 6,
"severe_defect_count": 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.
Ayadi Calculation
POSTBeta
https://api.96astro.com/v1/vastu/vastu-ayadiAyadi factors (aya-vyaya, yoni, nakshatra, vara) for given dimensions, how many are favourable, and the nearest all-favourable size.
- 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 |
|---|---|
perimeter_mnumber | nullOptional | Building perimeter in metres. Default: Limits: greater than 0, maximum 10000 |
length_mnumber | nullOptional | Or: length of a rectangular building. Default: Limits: greater than 0, maximum 5000 Example: |
breadth_mnumber | nullOptional | And its breadth. Default: Limits: greater than 0, maximum 5000 Example: |
unitstringOptional | The traditional unit the perimeter is counted in. Default: Allowed values: kishku_hastakerala_kolcustom Example: |
custom_unit_metresnumber | nullOptional | Length of the custom unit. Default: Limits: minimum 0.1, maximum 2 |
owner_nakshatrastring | nullOptional | Owner's birth star; enables Tara-bala. Default: Allowed values: AshwiniBharaniKrittikaRohiniMrigashiraArdraPunarvasuPushyaAshleshaMaghaPurva PhalguniUttara PhalguniHastaChitraSwatiVishakhaAnuradhaJyeshthaMulaPurva AshadhaUttara AshadhaShravanaDhanishtaShatabhishaPurva BhadrapadaUttara BhadrapadaRevati 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 |
|---|---|
kishku_hasta | Kishku hasta |
kerala_kol | Kerala kol |
custom | Custom unit |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
profile· objectunit· objectperimeter_m· numberperimeter_units· numberwhole_units· integerholds_between_m· array of numberfactors· objectfavourable_count· integerjudged_count· integerall_favourable· booleannearest_favourable· array of objectnote· string
Example request
curl -X POST https://api.96astro.com/v1/vastu/vastu-ayadi \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"length_m": 12,
"breadth_m": 9,
"unit": "kishku_hasta",
"owner_nakshatra": "Rohini"
}'const response = await fetch("https://api.96astro.com/v1/vastu/vastu-ayadi", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"length_m": 12,
"breadth_m": 9,
"unit": "kishku_hasta",
"owner_nakshatra": "Rohini"
}),
});
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.vastu.vastuAyadi({
"length_m": 12,
"breadth_m": 9,
"unit": "kishku_hasta",
"owner_nakshatra": "Rohini"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/vastu/vastu-ayadi",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"length_m": 12,
"breadth_m": 9,
"unit": "kishku_hasta",
"owner_nakshatra": "Rohini",
},
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.vastu.vastu_ayadi({
"length_m": 12,
"breadth_m": 9,
"unit": "kishku_hasta",
"owner_nakshatra": "Rohini",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/vastu/vastu-ayadi');
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([
'length_m' => 12,
'breadth_m' => 9,
'unit' => 'kishku_hasta',
'owner_nakshatra' => 'Rohini',
]),
]);
$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(`{
"length_m": 12,
"breadth_m": 9,
"unit": "kishku_hasta",
"owner_nakshatra": "Rohini"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/vastu/vastu-ayadi", 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": {
"profile": {
"id": "mayamata_perimeter_5",
"name": "Ayadi — Mayamata tradition, perimeter method (five factors)",
"basis": "perimeter, in whole units of the chosen measure",
"factors": {
"aya": {
"multiplier": 8,
"divisor": 12
},
"vyaya": {
"multiplier": 9,
"divisor": 10
},
"yoni": {
"multiplier": 3,
"divisor": 8
},
"nakshatra": {
…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.
Vastu + City Score
POSTBeta
https://api.96astro.com/v1/vastu/vastu-combined-with-cityCombines Vastu category scores with a city's location-astrology scores: a combined score and diagnosis per category, and an average.
- 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 |
|---|---|
vastu_scoresmap of numberRequired | Category scores from vastu-analyse. Limits: at least 1 entries |
location_scoresmap of numberRequired | The city's location-astrology category scores. Limits: at least 1 entries |
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.
categories· array of objectnot_combined· arrayaverage_combined_score· numbersummary· stringmethod· string
Example request
curl -X POST https://api.96astro.com/v1/vastu/vastu-combined-with-city \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"vastu_scores": {
"career": 63.3,
"wealth": 66.7,
"marriage": 61.9
},
"location_scores": {
"career": 82.4,
"wealth": 48,
"marriage": 71.5
}
}'const response = await fetch("https://api.96astro.com/v1/vastu/vastu-combined-with-city", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"vastu_scores": {
"career": 63.3,
"wealth": 66.7,
"marriage": 61.9
},
"location_scores": {
"career": 82.4,
"wealth": 48,
"marriage": 71.5
}
}),
});
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.vastu.vastuCombinedWithCity({
"vastu_scores": {
"career": 63.3,
"wealth": 66.7,
"marriage": 61.9
},
"location_scores": {
"career": 82.4,
"wealth": 48,
"marriage": 71.5
}
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/vastu/vastu-combined-with-city",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"vastu_scores": {
"career": 63.3,
"wealth": 66.7,
"marriage": 61.9,
},
"location_scores": {
"career": 82.4,
"wealth": 48,
"marriage": 71.5,
},
},
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.vastu.vastu_combined_with_city({
"vastu_scores": {
"career": 63.3,
"wealth": 66.7,
"marriage": 61.9,
},
"location_scores": {
"career": 82.4,
"wealth": 48,
"marriage": 71.5,
},
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/vastu/vastu-combined-with-city');
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([
'vastu_scores' => [
'career' => 63.3,
'wealth' => 66.7,
'marriage' => 61.9,
],
'location_scores' => [
'career' => 82.4,
'wealth' => 48,
'marriage' => 71.5,
],
]),
]);
$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(`{
"vastu_scores": {
"career": 63.3,
"wealth": 66.7,
"marriage": 61.9
},
"location_scores": {
"career": 82.4,
"wealth": 48,
"marriage": 71.5
}
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/vastu/vastu-combined-with-city", 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": {
"categories": [
{
"category": "career",
"vastu_score": 63.3,
"location_score": 82.4,
"combined_score": 52.2,
"diagnosis": "City helps compensate for the house"
},
{
"category": "marriage",
"vastu_score": 61.9,
"location_score": 71.5,
"combined_score": 44.3,
"diagnosis": "Balanced — both house and city aligned"
},
{
"category": "wealth",
"vastu_score": 66.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.
Remedy Timing
POSTBeta
https://api.96astro.com/v1/vastu/vastu-auspicious-timesAuspicious days in a range for carrying out a Vastu remedy, optionally for a deity: each day's tier, score, reasons, nakshatra and Brahma and Abhijit muhurta.
- 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 |
|---|---|
start_datestringRequired | Limits: format date Example: |
end_datestringRequired | Limits: format date Example: |
timezonestring | nullOptional | IANA time zone of the place, 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: |
deitystring | nullOptional | Deity of the remedy; favours that deity's weekday. Default: Allowed values: SunSuryaVishnuRamMoonSomaShivaMahamrityunjayaMarsHanumanDeviKartikeyaMercuryGaneshaSaraswatiJupiterBrihaspatiLakshmi-NarayanVenusLakshmiMahalakshmiDurgaSaturnKaliRahuKetu 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.
days· array of objectbasis· string
Example request
curl -X POST https://api.96astro.com/v1/vastu/vastu-auspicious-times \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"start_date": "2026-10-14",
"end_date": "2026-10-20",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"deity": "Ganesha"
}'const response = await fetch("https://api.96astro.com/v1/vastu/vastu-auspicious-times", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"start_date": "2026-10-14",
"end_date": "2026-10-20",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"deity": "Ganesha"
}),
});
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.vastu.vastuAuspiciousTimes({
"start_date": "2026-10-14",
"end_date": "2026-10-20",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"deity": "Ganesha"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/vastu/vastu-auspicious-times",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"start_date": "2026-10-14",
"end_date": "2026-10-20",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"deity": "Ganesha",
},
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.vastu.vastu_auspicious_times({
"start_date": "2026-10-14",
"end_date": "2026-10-20",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"deity": "Ganesha",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/vastu/vastu-auspicious-times');
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([
'start_date' => '2026-10-14',
'end_date' => '2026-10-20',
'timezone' => 'Asia/Kolkata',
'latitude' => 28.6139,
'longitude' => 77.209,
'deity' => 'Ganesha',
]),
]);
$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(`{
"start_date": "2026-10-14",
"end_date": "2026-10-20",
"timezone": "Asia/Kolkata",
"latitude": 28.6139,
"longitude": 77.209,
"deity": "Ganesha"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/vastu/vastu-auspicious-times", 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": {
"days": [
{
"date": "2026-10-14",
"weekday": "Wednesday",
"tier": "best",
"score": 95,
"reasons": [
"Auspicious nakshatra (Anuradha)",
"Wednesday matches deity Ganesha"
],
"nakshatra_at_sunrise": "Anuradha",
"sunrise": "06:21",
"sunset": "17:53",
"brahma_muhurta": {
"start": "04:41",
"end": "05:31"
},
"abhijit_muhurta": {
…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.
DXF Floor-Plan Import
POSTBeta
https://api.96astro.com/v1/vastu/vastu-import-dxfReads an ASCII DXF drawing into a reviewable plan (boundary, north, rooms, scale) with the drawing units and notes.
- 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 |
|---|---|
dxf_base64stringRequired | The ASCII DXF file, base64-encoded (at most 2 MB decoded). Limits: 8 to 2796210 characters 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.
plan· objectdrawing_units· stringnotes· array
Example request
curl -X POST https://api.96astro.com/v1/vastu/vastu-import-dxf \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"dxf_base64": "MApTRUNUSU9OCjIKSEVBREVSCjkKJEFDQURWRVIKMQpBQzEwMTUKOQokSU5TVU5JVFMKNzAKNgowCkVORFNFQwowClNFQ1RJT04KMgpFTlRJVElFUwowCkxXUE9MWUxJTkUKMTAwCkFjRGJFbnRpdHkKOAowCjEwMApBY0RiUG9seWxpbmUKOTAKNAo3MAoxCjEwCjAKMjAKMAoxMAoxMgoyMAowCjEwCjEyCjIwCjkKMTAKMAoyMAo5CjAKTFdQT0xZTElORQoxMDAKQWNEYkVudGl0eQo4CjAKMTAwCkFjRGJQb2x5bGluZQo5MAo0CjcwCjEKMTAKOQoyMAo2CjEwCjEyCjIwCjYKMTAKMTIKMjAKOQoxMAo5CjIwCjkKMApURVhUCjEwMApBY0RiRW50aXR5CjgKMAoxMDAKQWNEYlRleHQKMTAKMTAuNQoyMAo3LjUKNDAKMC4zCjEKS2l0Y2hlbgowCkVORFNFQwowCkVPRgo="
}'const response = await fetch("https://api.96astro.com/v1/vastu/vastu-import-dxf", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"dxf_base64": "MApTRUNUSU9OCjIKSEVBREVSCjkKJEFDQURWRVIKMQpBQzEwMTUKOQokSU5TVU5JVFMKNzAKNgowCkVORFNFQwowClNFQ1RJT04KMgpFTlRJVElFUwowCkxXUE9MWUxJTkUKMTAwCkFjRGJFbnRpdHkKOAowCjEwMApBY0RiUG9seWxpbmUKOTAKNAo3MAoxCjEwCjAKMjAKMAoxMAoxMgoyMAowCjEwCjEyCjIwCjkKMTAKMAoyMAo5CjAKTFdQT0xZTElORQoxMDAKQWNEYkVudGl0eQo4CjAKMTAwCkFjRGJQb2x5bGluZQo5MAo0CjcwCjEKMTAKOQoyMAo2CjEwCjEyCjIwCjYKMTAKMTIKMjAKOQoxMAo5CjIwCjkKMApURVhUCjEwMApBY0RiRW50aXR5CjgKMAoxMDAKQWNEYlRleHQKMTAKMTAuNQoyMAo3LjUKNDAKMC4zCjEKS2l0Y2hlbgowCkVORFNFQwowCkVPRgo="
}),
});
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.vastu.vastuImportDxf({
"dxf_base64": "MApTRUNUSU9OCjIKSEVBREVSCjkKJEFDQURWRVIKMQpBQzEwMTUKOQokSU5TVU5JVFMKNzAKNgowCkVORFNFQwowClNFQ1RJT04KMgpFTlRJVElFUwowCkxXUE9MWUxJTkUKMTAwCkFjRGJFbnRpdHkKOAowCjEwMApBY0RiUG9seWxpbmUKOTAKNAo3MAoxCjEwCjAKMjAKMAoxMAoxMgoyMAowCjEwCjEyCjIwCjkKMTAKMAoyMAo5CjAKTFdQT0xZTElORQoxMDAKQWNEYkVudGl0eQo4CjAKMTAwCkFjRGJQb2x5bGluZQo5MAo0CjcwCjEKMTAKOQoyMAo2CjEwCjEyCjIwCjYKMTAKMTIKMjAKOQoxMAo5CjIwCjkKMApURVhUCjEwMApBY0RiRW50aXR5CjgKMAoxMDAKQWNEYlRleHQKMTAKMTAuNQoyMAo3LjUKNDAKMC4zCjEKS2l0Y2hlbgowCkVORFNFQwowCkVPRgo="
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/vastu/vastu-import-dxf",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"dxf_base64": "MApTRUNUSU9OCjIKSEVBREVSCjkKJEFDQURWRVIKMQpBQzEwMTUKOQokSU5TVU5JVFMKNzAKNgowCkVORFNFQwowClNFQ1RJT04KMgpFTlRJVElFUwowCkxXUE9MWUxJTkUKMTAwCkFjRGJFbnRpdHkKOAowCjEwMApBY0RiUG9seWxpbmUKOTAKNAo3MAoxCjEwCjAKMjAKMAoxMAoxMgoyMAowCjEwCjEyCjIwCjkKMTAKMAoyMAo5CjAKTFdQT0xZTElORQoxMDAKQWNEYkVudGl0eQo4CjAKMTAwCkFjRGJQb2x5bGluZQo5MAo0CjcwCjEKMTAKOQoyMAo2CjEwCjEyCjIwCjYKMTAKMTIKMjAKOQoxMAo5CjIwCjkKMApURVhUCjEwMApBY0RiRW50aXR5CjgKMAoxMDAKQWNEYlRleHQKMTAKMTAuNQoyMAo3LjUKNDAKMC4zCjEKS2l0Y2hlbgowCkVORFNFQwowCkVPRgo=",
},
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.vastu.vastu_import_dxf({
"dxf_base64": "MApTRUNUSU9OCjIKSEVBREVSCjkKJEFDQURWRVIKMQpBQzEwMTUKOQokSU5TVU5JVFMKNzAKNgowCkVORFNFQwowClNFQ1RJT04KMgpFTlRJVElFUwowCkxXUE9MWUxJTkUKMTAwCkFjRGJFbnRpdHkKOAowCjEwMApBY0RiUG9seWxpbmUKOTAKNAo3MAoxCjEwCjAKMjAKMAoxMAoxMgoyMAowCjEwCjEyCjIwCjkKMTAKMAoyMAo5CjAKTFdQT0xZTElORQoxMDAKQWNEYkVudGl0eQo4CjAKMTAwCkFjRGJQb2x5bGluZQo5MAo0CjcwCjEKMTAKOQoyMAo2CjEwCjEyCjIwCjYKMTAKMTIKMjAKOQoxMAo5CjIwCjkKMApURVhUCjEwMApBY0RiRW50aXR5CjgKMAoxMDAKQWNEYlRleHQKMTAKMTAuNQoyMAo3LjUKNDAKMC4zCjEKS2l0Y2hlbgowCkVORFNFQwowCkVPRgo=",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/vastu/vastu-import-dxf');
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([
'dxf_base64' => 'MApTRUNUSU9OCjIKSEVBREVSCjkKJEFDQURWRVIKMQpBQzEwMTUKOQokSU5TVU5JVFMKNzAKNgowCkVORFNFQwowClNFQ1RJT04KMgpFTlRJVElFUwowCkxXUE9MWUxJTkUKMTAwCkFjRGJFbnRpdHkKOAowCjEwMApBY0RiUG9seWxpbmUKOTAKNAo3MAoxCjEwCjAKMjAKMAoxMAoxMgoyMAowCjEwCjEyCjIwCjkKMTAKMAoyMAo5CjAKTFdQT0xZTElORQoxMDAKQWNEYkVudGl0eQo4CjAKMTAwCkFjRGJQb2x5bGluZQo5MAo0CjcwCjEKMTAKOQoyMAo2CjEwCjEyCjIwCjYKMTAKMTIKMjAKOQoxMAo5CjIwCjkKMApURVhUCjEwMApBY0RiRW50aXR5CjgKMAoxMDAKQWNEYlRleHQKMTAKMTAuNQoyMAo3LjUKNDAKMC4zCjEKS2l0Y2hlbgowCkVORFNFQwowCkVPRgo=',
]),
]);
$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(`{
"dxf_base64": "MApTRUNUSU9OCjIKSEVBREVSCjkKJEFDQURWRVIKMQpBQzEwMTUKOQokSU5TVU5JVFMKNzAKNgowCkVORFNFQwowClNFQ1RJT04KMgpFTlRJVElFUwowCkxXUE9MWUxJTkUKMTAwCkFjRGJFbnRpdHkKOAowCjEwMApBY0RiUG9seWxpbmUKOTAKNAo3MAoxCjEwCjAKMjAKMAoxMAoxMgoyMAowCjEwCjEyCjIwCjkKMTAKMAoyMAo5CjAKTFdQT0xZTElORQoxMDAKQWNEYkVudGl0eQo4CjAKMTAwCkFjRGJQb2x5bGluZQo5MAo0CjcwCjEKMTAKOQoyMAo2CjEwCjEyCjIwCjYKMTAKMTIKMjAKOQoxMAo5CjIwCjkKMApURVhUCjEwMApBY0RiRW50aXR5CjgKMAoxMDAKQWNEYlRleHQKMTAKMTAuNQoyMAo3LjUKNDAKMC4zCjEKS2l0Y2hlbgowCkVORFNFQwowCkVPRgo="
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/vastu/vastu-import-dxf", 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": {
"plan": {
"boundary": [
[
40,
880
],
[
1160,
880
],
[
1160,
40
]
],
"north": {
"degrees": 0
},
…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.
Vastu Plan Templates
POSTBeta
https://api.96astro.com/v1/vastu/vastu-templatesLists the starter floor-plan templates with their rooms.
- Credits
- 1 credit
- Input
- No 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 |
|---|---|
include_previewbooleanOptional | Add each template's outline and rooms in percent of the frame, for thumbnails. Default: 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.
templates· array of object
Example request
curl -X POST https://api.96astro.com/v1/vastu/vastu-templates \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"include_preview": false
}'const response = await fetch("https://api.96astro.com/v1/vastu/vastu-templates", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"include_preview": false
}),
});
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.vastu.vastuTemplates({
"include_preview": false
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/vastu/vastu-templates",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"include_preview": False,
},
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.vastu.vastu_templates({
"include_preview": False,
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/vastu/vastu-templates');
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([
'include_preview' => false,
]),
]);
$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(`{
"include_preview": false
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/vastu/vastu-templates", 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": {
"templates": [
{
"id": "1bhk_north_entry",
"name": "1 BHK · North entry",
"description": "Single bedroom apartment with the main door on the north wall. Classic layout: bedroom SW, kitchen SE, hall NE, pooja in the north-east corner.",
"room_count": 5,
"includes": [
"5 rooms"
]
},
{
"id": "2bhk_east_entry",
"name": "2 BHK · East entry",
"description": "Two bedroom apartment with main door on the east. Master SW, kids W, kitchen SE, pooja NE.",
"room_count": 7,
"includes": [
"7 rooms"
]
…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.
Vastu Plan Template
POSTBeta
https://api.96astro.com/v1/vastu/vastu-templateOne starter template scaled to the given canvas size.
- 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 |
|---|---|
template_idstringRequired | Allowed values: 1bhk_north_entry2bhk_east_entry3bhk_classicplot_rectangularshop_commercialoffice_floorsample_house_delhi Example: |
widthintegerOptional | Width of the frame the template is drawn into. Default: Limits: minimum 100, maximum 10000 |
heightintegerOptional | Height of the frame. Default: Limits: minimum 100, maximum 10000 |
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 |
|---|---|
1bhk_north_entry | 1 BHK, North entry |
2bhk_east_entry | 2 BHK, East entry |
3bhk_classic | 3 BHK, Classic |
plot_rectangular | Vacant plot |
shop_commercial | Shop / Commercial |
office_floor | Office, Open plan |
sample_house_delhi | Sample house |
Response · fields in data
Inferred from the example response: a guide to the shape, not a contract.
template_id· stringplan· object
Example request
curl -X POST https://api.96astro.com/v1/vastu/vastu-template \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"template_id": "3bhk_classic"
}'const response = await fetch("https://api.96astro.com/v1/vastu/vastu-template", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"template_id": "3bhk_classic"
}),
});
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.vastu.vastuTemplate({
"template_id": "3bhk_classic"
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/vastu/vastu-template",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"template_id": "3bhk_classic",
},
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.vastu.vastu_template({
"template_id": "3bhk_classic",
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/vastu/vastu-template');
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([
'template_id' => '3bhk_classic',
]),
]);
$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(`{
"template_id": "3bhk_classic"
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/vastu/vastu-template", 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": {
"template_id": "3bhk_classic",
"plan": {
"boundary": [
[
60,
40
],
[
1140,
40
],
[
1140,
760
]
],
"north": {
"degrees": 0
…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.
Vastu Reference Tables
POSTBeta
https://api.96astro.com/v1/vastu/vastu-referenceThe 16 Vastu zones the analysis scores: each with its deity, element, planet, chakra, what it governs and what it suits.
- Credits
- 1 credit
- Input
- No 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 |
|---|---|
sectionsarray of stringOptional | Tables to return. Default: Each item one of: zonesentrancesdevatas Limits: at least 1 item |
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.
zones· array of object
Example request
curl -X POST https://api.96astro.com/v1/vastu/vastu-reference \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sections": [
"zones"
]
}'const response = await fetch("https://api.96astro.com/v1/vastu/vastu-reference", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"sections": [
"zones"
]
}),
});
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.vastu.vastuReference({
"sections": [
"zones"
]
});
console.log(data);import requests
response = requests.post(
"https://api.96astro.com/v1/vastu/vastu-reference",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"sections": [
"zones",
],
},
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.vastu.vastu_reference({
"sections": [
"zones",
],
})
print(res.data)<?php
$ch = curl_init('https://api.96astro.com/v1/vastu/vastu-reference');
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([
'sections' => [
'zones',
],
]),
]);
$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(`{
"sections": [
"zones"
]
}`)
req, err := http.NewRequest("POST", "https://api.96astro.com/v1/vastu/vastu-reference", 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": {
"zones": [
{
"code": "N",
"label": "North",
"deity": "Kubera",
"element": "Water",
"planet": "Mercury",
"chakra": "Throat",
"governs": "Wealth, career growth, opportunity flow",
"favourable_for": "Cash safe, main entrance, study room, water sources",
"unfavourable_for": "Toilets, kitchens, heavy clutter"
},
{
"code": "NNE",
"label": "North-North-East",
"deity": "Soma",
"element": "Water",
"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.