Skip to content

Paid (LLM) endpoints

LLM · paid plans

Scopes:

  • charts:read — GET /v1/geolocation/places, GET /v1/llm/interpretations, GET /v1/llm/interpretations/{id}, GET /v1/llm/usage-summary, POST /v1/llm/chart-reading, POST /v1/llm/dasha-forecast, POST /v1/llm/muhurta-reasoning, POST /v1/llm/theme/{theme}
  • interpretations:write — POST /v1/interpretations, POST /v1/interpretations/natal
  • no scope — GET /v1/plans

Paid plans only

These endpoints write text with a large language model, which costs money per call. They are not included in the Free plan: on Free they answer 403 plan_feature_unavailable before any model is called, so nothing is charged and nothing is sent to a model provider. Paid plans (Hobby, Pro) are coming soon — see GET /v1/plans.

Every other endpoint of the API is pure computation and is included in every plan.

Which endpoints use an LLM

Endpoint When the model is called Page
POST /v1/llm/theme/{theme} (+ /stream) always, unless a cached copy is returned LLM interpretations
POST /v1/llm/chart-reading (+ /stream) always, unless cached LLM interpretations
POST /v1/llm/dasha-forecast (+ /stream) always, unless cached LLM interpretations
POST /v1/llm/muhurta-reasoning (+ /stream) always, unless cached LLM interpretations
POST /v1/interpretations/natal, /relationship, /forecast always, unless cached Interpretations
POST /v1/interpretations only with use_llm_rewrite: true (the template version is free) Interpretations
GET /v1/geolocation/places paid plans: the model helps read free-text place names; Free: place database only, still works Geolocation

Reading what was already generated is free on every plan: GET /v1/llm/interpretations, GET /v1/llm/interpretations/{id}, GET /v1/llm/usage-summary.

Responses you can get

Status error.code Meaning What to do
403 plan_feature_unavailable Your plan has no LLM access Use the template endpoints, or upgrade when paid plans open
429 llm_budget_exceeded Paid plan: the hourly LLM spend cap is used up (details.cap_usd, details.spent_usd) Wait for the rolling hour
429 llm_tier_rate_limited Too many requests for this quality tier Respect Retry-After
503 llm_all_providers_failed, llm_timeout, llm_unavailable The model provider is down Retry later

Streaming (/stream) routes check plan and budget before the stream starts, so these errors arrive as normal HTTP statuses, not inside an event stream.

{
    "error": {
        "code": "plan_feature_unavailable",
        "message_key": "errors.llm.not_in_plan",
        "message": "This endpoint uses an LLM, which is not included in your plan. Paid plans with LLM access are coming soon; see GET /v1/plans.",
        "details": { "plan": "free", "feature": "llm" },
        "request_id": "019e…"
    }
}

What is sent to the model

Only the birth moment (UTC) and computed planet positions — never names, coordinates or account data. Calls go through OpenRouter to the model provider chosen for the quality tier. See Sub-processors and Data & privacy for developers.