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.

IdNameEndpointTypePrice per call
birth-chart-reportBirth Chart Report/v2/reports/birth-chart-reportcomputed—
annual-forecast-reportAnnual Forecast Report/v2/reports/annual-forecast-reportcomputed—
compatibility-reportCompatibility Report/v2/reports/compatibility-reportcomputed—
career-reportCareer Report/v2/reports/career-reportcomputed—
health-reportHealth Report/v2/reports/health-reportcomputed—
child-birth-reportChild Birth Report/v2/reports/child-birth-reportcomputed—
marriage-reportMarriage Report/v2/reports/marriage-reportcomputed—
remedial-reportRemedial Report/v2/reports/remedial-reportcomputed—
completeComplete Report/v2/reports/completecomputed$0.068
nakshatra-daily-predictionNakshatra Daily Prediction/v2/reports/nakshatra/daily-predictioncomputed$0.02
nakshatra-weekly-predictionNakshatra Weekly Prediction/v2/reports/nakshatra/weekly-predictioncomputed$0.028
nakshatra-monthly-predictionNakshatra Monthly Prediction/v2/reports/nakshatra/monthly-predictioncomputed$0.04
house-reportHouse Report/v2/reports/house-reportcomputed+cited$0.04
planet-reportPlanet Report/v2/reports/planet-reportcomputed+cited$0.028
rashi-reportRashi Report/v2/reports/rashi-reportcomputed+cited$0.04
vedic-janam-kundliVedic Janam Kundli PDF/v2/reports/janam-kundli-pdfpdf—

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.

ParameterInTypeRequiredDescription
langquerystringNoOptional response language; availability is endpoint-specific.
dateOfBirthbodystringYesBirth date.
timeOfBirthbodystringNoBirth time.
latitudebodynumberNoBirth latitude.
longitudebodynumberNoBirth longitude.
timezonebodystringNoBirth 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