Skip to content

AI Summary

Every calculation returns dozens of interpretation texts. An AI summary turns the most significant of them into a few sentences about what the horoscope actually means for the person — or, for synastry and composite, for the two people together.

Summaries are not generated during a calculation. The calculation hands you a signed link, and only opening that link runs the model.

Required Module

Requires the ai:summary module, included in the Premium and Deluxe plans. It is not sold separately.

You also need the interpretation texts of the horoscope type you are summarizing (for example natal:texts) — without texts there is nothing to summarize.

How it works

  1. You call a calculation endpoint as usual.
  2. The response contains a summary object with a signed URL.
  3. You open that URL when — and if — you want the summary.

Nothing is calculated, stored or charged in step 1 and 2. That is deliberate: a horoscope call should not pay for a feature most callers never use.

json
{
    "data": {
        "points": { "...": "..." },
        "aspects": [],
        "chart": { "url": "https://api.astroapi.cloud/api/chart2/natal.svg?..." },
        "summary": {
            "url": "https://api.astroapi.cloud/api/calc/natal/summary?t=eyJ0Ijoi...&expires=1793000000&sig=Ab3...",
            "method": "GET",
            "cost": 10,
            "expiresAt": "2026-08-30T10:00:00Z"
        }
    }
}
FieldDescription
urlSigned URL that returns the summary. Carries the whole request, so no body is needed.
methodAlways GET.
costAPI requests charged when the summary is generated. A cached summary costs 1.
expiresAtThe link stops working after 7 days. Re-run the calculation for a fresh one.

The summary object is only present when your subscription includes the module. If it is missing, check your plan.

Store the link, not just the chart

The link expires after 7 days and it is signed for exactly one chart. It cannot be edited: changing the birth data, the horoscope type or the organization in the URL invalidates the signature.

Getting the summary

bash
curl "https://api.astroapi.cloud/api/calc/natal/summary?t=eyJ0Ijoi...&expires=1793000000&sig=Ab3..." \
  -H "X-Api-Key: your-api-key"

The signature makes the API key optional, so the link also works from a browser or an embed that cannot set headers. When you do send a key, it must belong to the same organization the link was issued to.

This takes a while

Generating a summary runs the calculation again, fetches the texts and calls a language model. Expect several seconds. A summary that was generated before returns immediately.

Response

json
{
    "data": {
        "horoscopeType": "natal",
        "language": "en",
        "summary": "You lead with visibility rather than caution: the Sun in Leo in the tenth house puts your work and your reputation at the centre of how you understand yourself…",
        "cached": false,
        "generatedAt": "2026-08-23T10:15:22Z",
        "model": "@cf/qwen/qwen3-30b-a3b-fp8",
        "highlights": [
            { "kind": "point", "label": "Sun in Leo in house 10" },
            { "kind": "point", "label": "Moon in Taurus in house 7" },
            { "kind": "aspect", "label": "Sun square Saturn (orb 0.4°)" }
        ]
    }
}
FieldDescription
summaryThe generated text, 4 to 6 sentences.
cachedtrue when served from cache. Cached summaries count as 1 request instead of 10.
highlightsThe placements the summary was written from, strongest first.
modelThe model that wrote the text.

Supported horoscope types

TypeEndpointWhat the summary is about
natal/api/calc/natal/summaryWho this person is
synastry/api/calc/synastry/summaryWhat these two people do to each other
composite/api/calc/composite/summaryThe relationship the two of them form
transit/api/calc/transit/summaryThe period ahead
solar/api/calc/solar-return/summaryThe year ahead
lunar/api/calc/lunar-return/summaryThe month ahead
progressions/api/calc/progressions/summaryThe phase of life this person is in

What goes into the summary

A full natal chart yields 40+ interpretation texts. Feeding all of them to a model produces a listing, not a reading — and costs far more. Instead, the placements are scored and only the strongest survive:

  • Placements — the luminaries and the Ascendant weigh heaviest, then the chart ruler, personal planets, and anything in an angular house.
  • Aspects — scored on exactness (how tight the orb is relative to that aspect's maximum), on how major the aspect is, and on how personal the two ends are. An exact Sun–Saturn square outranks a wide Neptune–Pluto sextile by a wide margin.
  • Synastry keeps only cross-aspects, in both directions, tagged by whose planet acts on whose chart.
  • Transits additionally include the houses transiting planets are moving through.

Scoring is deterministic: the same chart always produces the same selection, which is what makes the result cacheable.

The model may only use the texts it is given. It does not invent placements, dates or advice — so a summary reflects your own interpretation texts, including any you edited yourself with the Content Editor.

Language

The summary is written in the language of the calculation. Pass language on the calculation request and the link carries it:

bash
curl -X POST "https://api.astroapi.cloud/api/calc/natal" \
  -H "X-Api-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "dateTime": "1990-06-15T14:30",
    "location": { "longitude": 4.89, "latitude": 52.37, "timezone": "Europe/Amsterdam" },
    "language": "nl",
    "includeText": true
  }'

The interpretation texts are already localized, and the model is instructed to write in the same language.

What it costs

SituationAPI requests
Calculation with a summary link in the response1 (unchanged)
Opening the link, summary generated10
Opening the link, summary already cached1
The request failed (403, 422, expired link)0

Generated summaries are cached for 30 days per chart, language and prompt version, so repeatedly opening the same link is cheap.

The X-Quota-Limit, X-Quota-Remaining and X-Quota-Reset response headers reflect the weighted cost, and so does the usage reporting in the dashboard.

Errors

StatusMeaning
400The link is malformed or the token does not belong to this horoscope type.
401The signature is invalid or the link expired.
403Your subscription lacks ai:summary or the interpretation texts of this type, or the link belongs to another organization.
409A summary for this chart is already being generated. Retry in a few seconds — this stops you paying twice for the same text.
422No interpretation texts are available for this chart, so there is nothing to summarize.

Next Steps

AstroAPI Documentation