Response Shape
The 200 envelope, field by field — answer, chart, follow-ups and the cost breakdown.
A 200 returns the reading plus a complete usage and cost breakdown. Billing and usage are nested under metadata.
#Response envelope
{
"answer": "Based on your chart, the 10th house lord ...",
"response": "…(same as answer)…",
"birthChart": { "...": "computed chart" },
"conversationId": "1a8cee6b-…",
"followUps": ["…"],
"metadata": {
"cost": { "costUsd": 0.0253, "currency": "USD" },
"usage": { "input_tokens": 12084, "output_tokens": 291,
"cached_tokens": 0, "total_tokens": 12375 },
"creditsUsed": 0.0253,
"creditsRemaining": 49.97,
"speed": "standard",
"language": "en"
},
"success": true
}#Field reference
- answer / response
- The reading, in the requested or detected language (both carry the same text).
- birthChart
- The computed chart the reading is grounded in — your citation surface (see Grounding).
- conversationId
- Echo it on the next request for multi-turn memory.
- followUps
- Suggested next questions you can surface in the UI.
- metadata.cost.costUsd
- Exact USD deducted from your wallet for this call.
- metadata.usage
- Token breakdown, including
cached_tokens; reconciles to the charge at the published rates. - metadata.creditsRemaining
- Wallet balance after this call.
- metadata.speed / language
- The tier and language actually used.
#Structured output
With "responseFormat": "json", the body also includes a structuredResponse object built from the reading — convenient when you render fields rather than prose. See Structured Outputs.
Note
A query answered from the cache — or served by a direct chart calculation without calling the reasoning engine — is charged a flat
$0.01 and returns usage: {0,0,0}, because no tokens were generated. A short but novel question still reaches the engine and is billed at its tier's normal rate. Either way, metadata.cost.costUsd is always authoritative for what you paid. See Prompt Caching.