Reports guide
Reports are single calls that return a finished analysis for one birth chart. Pick one from the catalog, try it in the sandbox, then call the same shape in production.
1. List the reports
The catalog is public and needs no key. Each entry has an id, a name, the endpoint to call and a type.
curl
curl --fail-with-body --silent --show-error \
"https://api.vedika.io/api/v1/reports/catalog"JavaScript
// Node.js 18 or later.
const response = await fetch('https://api.vedika.io/api/v1/reports/catalog', {
method: 'GET',
});
const result = await response.json();
if (!response.ok) throw new Error(result.error?.message ?? response.status);
console.log(result.data);Python
# Python 3, standard library only.
import json, os, urllib.request
request = urllib.request.Request(
'https://api.vedika.io/api/v1/reports/catalog',
method='GET',
headers={},
)
with urllib.request.urlopen(request) as response:
print(json.load(response)['data'])These are the reports it lists today. A dash means the operation has no entry in the published price list; the billing block of a response always shows what was charged.
| Id | Name | Endpoint | Type | Price per call |
|---|---|---|---|---|
birth-chart-report | Birth Chart Report | /v2/reports/birth-chart-report | computed | — |
annual-forecast-report | Annual Forecast Report | /v2/reports/annual-forecast-report | computed | — |
compatibility-report | Compatibility Report | /v2/reports/compatibility-report | computed | — |
career-report | Career Report | /v2/reports/career-report | computed | — |
health-report | Health Report | /v2/reports/health-report | computed | — |
child-birth-report | Child Birth Report | /v2/reports/child-birth-report | computed | — |
marriage-report | Marriage Report | /v2/reports/marriage-report | computed | — |
remedial-report | Remedial Report | /v2/reports/remedial-report | computed | — |
complete | Complete Report | /v2/reports/complete | computed | $0.068 |
nakshatra-daily-prediction | Nakshatra Daily Prediction | /v2/reports/nakshatra/daily-prediction | computed | $0.02 |
nakshatra-weekly-prediction | Nakshatra Weekly Prediction | /v2/reports/nakshatra/weekly-prediction | computed | $0.028 |
nakshatra-monthly-prediction | Nakshatra Monthly Prediction | /v2/reports/nakshatra/monthly-prediction | computed | $0.04 |
house-report | House Report | /v2/reports/house-report | computed+cited | $0.04 |
planet-report | Planet Report | /v2/reports/planet-report | computed+cited | $0.028 |
rashi-report | Rashi Report | /v2/reports/rashi-report | computed+cited | $0.04 |
vedic-janam-kundli | Vedic Janam Kundli PDF | /v2/reports/janam-kundli-pdf | — |
2. Run one in the sandbox
The sandbox needs no key and charges nothing. It answers with a fixed sample for a demo birth (the meta block says "mode": "sandbox" and "inputUsage": "ignored"), so use it to check your integration, not to read a real chart. This call is POST /sandbox/reports/rashi-report with the same body as production.
curl
curl --fail-with-body --silent --show-error -X POST \
-H "Content-Type: application/json" \
-d '{"dateOfBirth":"1990-05-15","timeOfBirth":"10:30","latitude":28.6139,"longitude":77.209,"timezone":"Asia/Kolkata"}' \
"https://api.vedika.io/sandbox/reports/rashi-report"JavaScript
// Node.js 18 or later.
const response = await fetch('https://api.vedika.io/sandbox/reports/rashi-report', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"dateOfBirth": "1990-05-15",
"timeOfBirth": "10:30",
"latitude": 28.6139,
"longitude": 77.209,
"timezone": "Asia/Kolkata"
}),
});
const result = await response.json();
if (!response.ok) throw new Error(result.error?.message ?? response.status);
console.log(result.data);Python
# Python 3, standard library only.
import json, os, urllib.request
request = urllib.request.Request(
'https://api.vedika.io/sandbox/reports/rashi-report',
method='POST',
data=json.dumps({
"dateOfBirth": "1990-05-15",
"timeOfBirth": "10:30",
"latitude": 28.6139,
"longitude": 77.209,
"timezone": "Asia/Kolkata"
}).encode(),
headers={'Content-Type': 'application/json'},
)
with urllib.request.urlopen(request) as response:
print(json.load(response)['data'])The sandbox is limited per caller (10 requests a minute, 50 an hour, 100 a UTC day); a 429 means wait and retry later.
3. Call it in production
Send the same body to POST /v2/reports/rashi-report with your key. This report costs $0.04 per call. Keep the key on your server and read it from the environment, as in the authentication notes.
curl
curl --fail-with-body --silent --show-error -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $VEDIKA_API_KEY" \
-d '{"dateOfBirth":"1990-05-15","timeOfBirth":"10:30","latitude":28.6139,"longitude":77.209,"timezone":"Asia/Kolkata"}' \
"https://api.vedika.io/v2/reports/rashi-report"JavaScript
// Node.js 18 or later.
const response = await fetch('https://api.vedika.io/v2/reports/rashi-report', {
method: 'POST',
headers: { 'Authorization': `Bearer ${process.env.VEDIKA_API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"dateOfBirth": "1990-05-15",
"timeOfBirth": "10:30",
"latitude": 28.6139,
"longitude": 77.209,
"timezone": "Asia/Kolkata"
}),
});
const result = await response.json();
if (!response.ok) throw new Error(result.error?.message ?? response.status);
console.log(result.data);Python
# Python 3, standard library only.
import json, os, urllib.request
request = urllib.request.Request(
'https://api.vedika.io/v2/reports/rashi-report',
method='POST',
data=json.dumps({
"dateOfBirth": "1990-05-15",
"timeOfBirth": "10:30",
"latitude": 28.6139,
"longitude": 77.209,
"timezone": "Asia/Kolkata"
}).encode(),
headers={'Authorization': 'Bearer ' + os.environ['VEDIKA_API_KEY'], 'Content-Type': 'application/json'},
)
with urllib.request.urlopen(request) as response:
print(json.load(response)['data'])A successful response has success, data, billing, meta. Read the report from data and the charge from billing.
Parameters
For /v2/reports/rashi-report. Other reports take their own fields: open the operation in the reference before you call one.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
lang | query | string | No | Optional response language; availability is endpoint-specific. |
dateOfBirth | body | string | Yes | Birth date. |
timeOfBirth | body | string | No | Birth time. |
latitude | body | number | No | Birth latitude. |
longitude | body | number | No | Birth longitude. |
timezone | body | string | No | Birth timezone. |
Errors and limits
Check the HTTP status before reading data. Fix invalid input before retrying; a 401 or 403 means check your key and plan; on a 429 honour Retry-After and back off. Retry a paid call only as the operation's idempotency contract allows. Details are in Errors & limits.
Next steps
- Reports in the playground: try a report with your own inputs.
- API reference: every report operation with inputs and recorded responses.
- SDK installation if you prefer a client library.