Biorhythm
Three cycles counted from the date of birth: the day's values, a chartable range, critical days, phases and two people's distance. Arithmetic, with the sources and the evidence stated.
The three cycles on a date, with their state, trend, next critical date and meaning
POST/v1/biorhythm/reading
1 credit · Secret key (test or live) · getBiorhythmReading · Page for this operation
Value = 100 × sin(2π × days since birth ÷ period), with periods of 23, 28 and 33 days. Controlled studies have not found that biorhythm predicts events.
Request body
birth_datestring (date) requiredThe date of birth. It is used for this response and not stored.
e.g.
"1990-08-13"datestring (date) requirede.g.
"1990-08-13"langstringone of
en,hi· default"en"
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
datestring (date) requirede.g.
"1990-08-13"days_since_birthinteger requiredcyclesarray of object requiredidstring requiredone of
physical,emotional,intellectualnamestring requiredperiod_daysinteger requiredvaluenumber required≥ -100 · ≤ 100
statestring requiredone of
positive,negative,criticaltrendstring requiredone of
rising,fallingday_in_cycleinteger requirednext_criticalstring (date) requirede.g.
"1990-08-13"meaningstring required
critical_todayarray of string requirednotestring required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/biorhythm/reading' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"birth_date":"1990-05-15","date":"2026-11-02"}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/biorhythm/reading", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"birth_date": "1990-05-15",
"date": "2026-11-02"
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"birth_date": "1990-05-15",
"date": "2026-11-02",
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/biorhythm/reading",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/biorhythm/reading');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"birth_date":"1990-05-15","date":"2026-11-02"}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 1,595 characters
{
"data": {
"date": "2026-11-02",
"days_since_birth": 13320,
"cycles": [
{
"id": "physical",
"name": "Physical",
"period_days": 23,
"value": 73.1,
"state": "positive",
"trend": "rising",
"day_in_cycle": 3,
"next_critical": "2026-11-10",
"meaning": "The physical cycle is in its upper half, which biorhythm charts read as more energy and stamina."
},
{
"id": "emotional",
"name": "Emotional",
"period_days": 28,
"value": -97.5,
"state": "negative",
"trend": "falling",
"day_in_cycle": 20,
"next_critical": "2026-11-10",
"meaning": "The emotional cycle is in its lower half, which biorhythm charts read as a quieter or more sensitive mood."
},
{
"id": "intellectual",
"name": "Intellectual",
"period_days": 33,
"value": -75.6,
"state": "negative",
"trend": "falling",
"day_in_cycle": 21,
"next_critical": "2026-11-14",
"meaning": "The intellectual cycle is in its lower half, which biorhythm charts read as a time for review over new work."
}
],
"critical_today": [],
"note": "Biorhythm is a tradition of counting days from birth. Controlled studies have not found that it predicts events, so read this for interest and not for decisions."
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 1
},
"warnings": []
}Try it
The three values for each day of a range, ready to chart
POST/v1/biorhythm/forecast
1 credit · Secret key (test or live) · getBiorhythmForecast · Page for this operation
Request body
birth_datestring (date) requiredThe date of birth. It is used for this response and not stored.
e.g.
"1990-08-13"fromstring (date) requirede.g.
"1990-08-13"daysinteger≥ 1 · ≤ 366 · default
30
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
fromstring (date) requirede.g.
"1990-08-13"countinteger requireddaysarray of object requireddatestring (date) requirede.g.
"1990-08-13"physicalnumber requiredemotionalnumber requiredintellectualnumber requiredcriticalarray of string required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/biorhythm/forecast' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"birth_date":"1990-05-15","from":"2026-11-02","days":7}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/biorhythm/forecast", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"birth_date": "1990-05-15",
"from": "2026-11-02",
"days": 7
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"birth_date": "1990-05-15",
"from": "2026-11-02",
"days": 7,
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/biorhythm/forecast",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/biorhythm/forecast');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"birth_date":"1990-05-15","from":"2026-11-02","days":7}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 1,334 characters
{
"data": {
"from": "2026-11-02",
"count": 7,
"days": [
{
"date": "2026-11-02",
"physical": 73.1,
"emotional": -97.5,
"intellectual": -75.6,
"critical": []
},
{
"date": "2026-11-03",
"physical": 88.8,
"emotional": -100,
"intellectual": -86.6,
"critical": []
},
{
"date": "2026-11-04",
"physical": 97.9,
"emotional": -97.5,
"intellectual": -94.5,
"critical": []
},
{
"date": "2026-11-05",
"physical": 99.8,
"emotional": -90.1,
"intellectual": -99,
"critical": []
},
{
"date": "2026-11-06",
"physical": 94.2,
"emotional": -78.2,
"intellectual": -99.9,
"critical": []
},
{
"date": "2026-11-07",
"physical": 81.7,
"emotional": -62.3,
"intellectual": -97.2,
"critical": []
},
{
"date": "2026-11-08",
"physical": 63.1,
"emotional": -43.4,
"intellectual": -91,
"critical": []
}
]
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 1
},
"warnings": []
}Try it
The dates a cycle crosses zero, marked single, double or triple
POST/v1/biorhythm/critical-days
1 credit · Secret key (test or live) · getBiorhythmCriticalDays · Page for this operation
With 23 and 33 days the crossing can fall between two dates. A date is critical when a crossing falls between its start and the start of the next date. At most 366 days.
Request body
birth_datestring (date) requiredThe date of birth. It is used for this response and not stored.
e.g.
"1990-08-13"fromstring (date) requirede.g.
"1990-08-13"tostring (date) requiredInclusive. At most 366 days from from.
e.g.
"1990-08-13"
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
fromstring (date) requirede.g.
"1990-08-13"tostring (date) requirede.g.
"1990-08-13"countinteger requireddaysarray of object requireddatestring (date) requirede.g.
"1990-08-13"days_since_birthinteger requiredkindstring requiredone of
single,double,triplecrossingsarray of object requiredFields
cyclestring requiredone of
physical,emotional,intellectualdirectionstring requiredone of
rising,fallingcrossing_daynumber requiredDays since birth at the crossing. It can end in .5.
rulestring required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/biorhythm/critical-days' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"birth_date":"1990-05-15","from":"2026-11-01","to":"2026-11-30"}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/biorhythm/critical-days", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"birth_date": "1990-05-15",
"from": "2026-11-01",
"to": "2026-11-30"
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"birth_date": "1990-05-15",
"from": "2026-11-01",
"to": "2026-11-30",
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/biorhythm/critical-days",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/biorhythm/critical-days');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"birth_date":"1990-05-15","from":"2026-11-01","to":"2026-11-30"}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 1,867 characters
{
"data": {
"from": "2026-11-01",
"to": "2026-11-30",
"count": 5,
"days": [
{
"date": "2026-11-10",
"days_since_birth": 13328,
"kind": "double",
"crossings": [
{
"cycle": "physical",
"direction": "falling",
"crossing_day": 13328.5
},
{
"cycle": "emotional",
"direction": "rising",
"crossing_day": 13328
}
]
},
{
"date": "2026-11-14",
"days_since_birth": 13332,
"kind": "single",
"crossings": [
{
"cycle": "intellectual",
"direction": "rising",
"crossing_day": 13332
}
]
},
{
"date": "2026-11-22",
"days_since_birth": 13340,
"kind": "single",
"crossings": [
{
"cycle": "physical",
"direction": "rising",
"crossing_day": 13340
}
]
},
{
"date": "2026-11-24",
"days_since_birth": 13342,
"kind": "single",
"crossings": [
{
"cycle": "emotional",
"direction": "falling",
"crossing_day": 13342
}
]
},
{
"date": "2026-11-30",
"days_since_birth": 13348,
"kind": "single",
"crossings": [
{
"cycle": "intellectual",
"direction": "falling",
"crossing_day": 13348.5
}
]
}
],
"rule": "A date is critical when a cycle crosses zero between its start and the start of the next date."
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 1
},
"warnings": []
}Try it
How far two people's cycles sit apart, scored for each cycle
POST/v1/biorhythm/compatibility
1 credit · Secret key (test or live) · getBiorhythmCompatibility · Page for this operation
The distance between two people's cycles never changes, so this takes no date. The score is a labelled convention.
Request body
birth_date_astring (date) requiredThe date of birth. It is used for this response and not stored.
e.g.
"1990-08-13"birth_date_bstring (date) requiredThe date of birth. It is used for this response and not stored.
e.g.
"1990-08-13"langstringone of
en,hi· default"en"
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
days_apartinteger requiredcyclesarray of object requiredidstring requiredone of
physical,emotional,intellectualnamestring requiredoffset_daysinteger requiredscorenumber required≥ 0 · ≤ 100
overallnumber required≥ 0 · ≤ 100
basisstring requiredone of
conventionrulestring requirednotestring required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/biorhythm/compatibility' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"birth_date_a":"1990-05-15","birth_date_b":"1992-01-20"}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/biorhythm/compatibility", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"birth_date_a": "1990-05-15",
"birth_date_b": "1992-01-20"
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"birth_date_a": "1990-05-15",
"birth_date_b": "1992-01-20",
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/biorhythm/compatibility",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/biorhythm/compatibility');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"birth_date_a":"1990-05-15","birth_date_b":"1992-01-20"}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 931 characters
{
"data": {
"days_apart": 615,
"cycles": [
{
"id": "physical",
"name": "Physical",
"offset_days": 17,
"score": 46.6
},
{
"id": "emotional",
"name": "Emotional",
"offset_days": 27,
"score": 98.7
},
{
"id": "intellectual",
"name": "Intellectual",
"offset_days": 21,
"score": 17.3
}
],
"overall": 54.2,
"basis": "convention",
"rule": "score = 50 × (1 + cos(2π × days apart ÷ period)); overall is the mean of the three.",
"note": "Biorhythm is a tradition of counting days from birth. Controlled studies have not found that it predicts events, so read this for interest and not for decisions."
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 1
},
"warnings": []
}Try it
Where each cycle is: its half, when that half began and ends, and the next peak and trough
POST/v1/biorhythm/phases
1 credit · Secret key (test or live) · getBiorhythmPhases · Page for this operation
Request body
birth_datestring (date) requiredThe date of birth. It is used for this response and not stored.
e.g.
"1990-08-13"datestring (date) requirede.g.
"1990-08-13"
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
datestring (date) requirede.g.
"1990-08-13"days_since_birthinteger requiredcyclesarray of object requiredidstring requiredone of
physical,emotional,intellectualperiod_daysinteger requiredhalfstring requiredone of
upper,lowertrendstring requiredone of
rising,fallingpercent_through_cyclenumber requiredhalf_beganstring (date) requirede.g.
"1990-08-13"half_endsstring (date) requirede.g.
"1990-08-13"next_peakstring (date) requirede.g.
"1990-08-13"next_troughstring (date) requirede.g.
"1990-08-13"
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/biorhythm/phases' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"birth_date":"1990-05-15","date":"2026-11-02"}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/biorhythm/phases", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"birth_date": "1990-05-15",
"date": "2026-11-02"
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"birth_date": "1990-05-15",
"date": "2026-11-02",
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/biorhythm/phases",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/biorhythm/phases');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"birth_date":"1990-05-15","date":"2026-11-02"}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 1,185 characters
{
"data": {
"date": "2026-11-02",
"days_since_birth": 13320,
"cycles": [
{
"id": "physical",
"period_days": 23,
"half": "upper",
"trend": "rising",
"percent_through_cycle": 13,
"half_began": "2026-10-30",
"half_ends": "2026-11-10",
"next_peak": "2026-11-05",
"next_trough": "2026-11-16"
},
{
"id": "emotional",
"period_days": 28,
"half": "lower",
"trend": "falling",
"percent_through_cycle": 71.4,
"half_began": "2026-10-27",
"half_ends": "2026-11-10",
"next_peak": "2026-11-17",
"next_trough": "2026-11-03"
},
{
"id": "intellectual",
"period_days": 33,
"half": "lower",
"trend": "falling",
"percent_through_cycle": 63.6,
"half_began": "2026-10-28",
"half_ends": "2026-11-14",
"next_peak": "2026-11-22",
"next_trough": "2026-11-06"
}
]
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 1
},
"warnings": []
}Try it
A short daily summary with the coming week's values
POST/v1/biorhythm/daily
1 credit · Secret key (test or live) · getBiorhythmDaily · Page for this operation
Request body
birth_datestring (date) requiredThe date of birth. It is used for this response and not stored.
e.g.
"1990-08-13"datestring (date) requirede.g.
"1990-08-13"langstringone of
en,hi· default"en"
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
datestring (date) requirede.g.
"1990-08-13"headlinestring requiredvaluesobject requiredphysicalnumber requiredemotionalnumber requiredintellectualnumber required
higheststring requiredone of
physical,emotional,intellectualcritical_todayarray of string requirednext_criticalstring (date) requirede.g.
"1990-08-13"weekarray of object requireddatestring (date) requirede.g.
"1990-08-13"physicalnumber requiredemotionalnumber requiredintellectualnumber requiredcriticalarray of string required
notestring required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/biorhythm/daily' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"birth_date":"1990-05-15","date":"2026-11-02","lang":"hi"}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/biorhythm/daily", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"birth_date": "1990-05-15",
"date": "2026-11-02",
"lang": "hi"
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"birth_date": "1990-05-15",
"date": "2026-11-02",
"lang": "hi",
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/biorhythm/daily",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/biorhythm/daily');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"birth_date":"1990-05-15","date":"2026-11-02","lang":"hi"}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 1,723 characters
{
"data": {
"date": "2026-11-02",
"headline": "आज सबसे ऊँचा: शारीरिक।",
"values": {
"physical": 73.1,
"emotional": -97.5,
"intellectual": -75.6
},
"highest": "physical",
"critical_today": [],
"next_critical": "2026-11-10",
"week": [
{
"date": "2026-11-02",
"physical": 73.1,
"emotional": -97.5,
"intellectual": -75.6,
"critical": []
},
{
"date": "2026-11-03",
"physical": 88.8,
"emotional": -100,
"intellectual": -86.6,
"critical": []
},
{
"date": "2026-11-04",
"physical": 97.9,
"emotional": -97.5,
"intellectual": -94.5,
"critical": []
},
{
"date": "2026-11-05",
"physical": 99.8,
"emotional": -90.1,
"intellectual": -99,
"critical": []
},
{
"date": "2026-11-06",
"physical": 94.2,
"emotional": -78.2,
"intellectual": -99.9,
"critical": []
},
{
"date": "2026-11-07",
"physical": 81.7,
"emotional": -62.3,
"intellectual": -97.2,
"critical": []
},
{
"date": "2026-11-08",
"physical": 63.1,
"emotional": -43.4,
"intellectual": -91,
"critical": []
}
],
"note": "बायोरिदम जन्म से दिन गिनने की एक परंपरा है। नियंत्रित अध्ययनों में यह घटनाओं का पूर्वानुमान करती नहीं पाई गई, इसलिए इसे रुचि के लिए पढ़ें, निर्णय के लिए नहीं।"
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.10.10",
"mode": "live",
"credits_charged": 1
},
"warnings": []
}