Aspect Patterns
Multi-body configurations — T-squares, grand trines, yods, kites, grand crosses, mystic rectangles, and stellia — and how the API decides what counts.
Aspect Patterns
Individual aspects describe pairs. A pattern is a closed figure of three or more bodies whose aspects lock together, and astrologers read it as a single unit: a T-square is not "an opposition and two squares" but a specific kind of tension with a release point at its apex.
The API detects seven of them, via /v1/patterns or the patterns=true flag on any chart endpoint.
The seven patterns
| Pattern | Geometry | Members | Focal |
|---|---|---|---|
| T-square | Two bodies in opposition, both square a third | 3 | The apex (the squared body) |
| Grand trine | Three bodies each trine the other two — an equilateral triangle | 3 | — |
| Grand cross | Two oppositions at right angles: four bodies, four squares | 4 | — |
| Yod | Two bodies in sextile, both quincunx a third — the "finger of God" | 3 | The apex (the body both quincunxes point at) |
| Kite | A grand trine plus a fourth body opposing one vertex and sextile the other two | 4 | The fourth body |
| Mystic rectangle | Two oppositions whose four sides alternate trine and sextile | 4 | — |
| Stellium | Three or more bodies bunched together | 3+ | — |
A stellium's grouping rule is configurable: same zodiac sign (the default and the traditional definition), same house (needs a location), or a conjunction chain — bodies linked by conjunction aspects, which can straddle a sign boundary.
How detection works, and why it matters
The API assembles patterns from the aspects it has already detected. It never goes back to the raw longitudes and asks "are these three bodies roughly 120° apart?". This has three consequences you can rely on:
A pattern can only use aspect types you asked for. If the request's aspects list has no quincunx, no yod can appear, because a yod is made of quincunxes. The default aspect set (the seven major aspects) contains everything the seven patterns need; if you narrow it and then filter for a pattern that can no longer form, the response says so in warnings instead of returning an empty list that looks like "no yod today".
The orbs are the orbs you set. Each pattern's aspects are the chart's own aspect records, max_orb included. There is no separate, tighter "pattern orb" — if a square is in the chart, it is available to a T-square. The pattern's tightness is simply the widest of its forming orbs, so you can apply your own threshold afterwards.
Bigger figures contain smaller ones, and both are reported. A kite always contains a grand trine; a grand cross contains four T-squares; a mystic rectangle has oppositions but no squares, so it contains no T-square. The API reports every figure it finds and leaves the "only show me the largest" decision to you, because which one matters depends on what you are doing.
Reading the output
Every pattern record has the same shape:
pattern— the typebodies— the members, in the chart's body order, with the focal body last if there is onefocal— the apex or tail, for the three patterns that have oneaspects— the forming aspectstightness— the widest forming orb, or a stellium's span in degrees
Two T-squares that share an opposition but have different apexes are two records. Three bodies in Capricorn with the Sun at 24° and Pluto at 29° are one stellium whose tightness is the arc from its first member to its last.
An example worth knowing
The full moon of 25 January 2024 (18:00 UTC) had the Sun at 5° Aquarius opposite the Moon at 5° Leo, with Jupiter at 6° Taurus square both. That is a textbook T-square with Jupiter at the apex, and it is the example used throughout the reference page. Pluto, conjunct the Sun at 0° Aquarius, is also opposed by the Moon and squared by Jupiter — so the same moment yields a second T-square, Moon–Pluto–Jupiter, a little wider. Both are reported.