---
title: "Compare several explicit aspect-orb policies on one chart"
method: POST
path: "/api/astro/aspect-policy-stability"
tags: ["Calculations"]
---

# Compare several explicit aspect-orb policies on one chart

`POST /api/astro/aspect-policy-stability`

## Request

- Base URL: `https://api.cosmicephemeris.com`
- URL: `https://api.cosmicephemeris.com/api/astro/aspect-policy-stability`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Calculates one exact chart and evaluates 2–4 caller-declared, unweighted aspect policies over 3–10 selected planets. Returns every aspect admitted by at least one policy, exact separation and orb, per-policy configured boundary and signed margin, policy-set fingerprints, and deterministic equivalence groups. Aspects rejected by every policy are intentionally omitted. The result does not rank policies or claim strength, confidence, interpretation, prediction, or practitioner preference. One standard quota unit per admitted request; failed or timed-out admitted attempts are not refunded. Do not automatically retry.
Historical mode uses an explicit BCE/CE date object and UT1 conventions. Its response is the versioned historical envelope, not the modern UTC envelope. Read result for calculation fields and metadata for limits and uncertainty.

## Headers

- `X-Cosmic-Ephemeris-Receipt` 'v1'

## Request body

- union
  - AspectPolicyStabilityRequest
    - `birth` HouseSystemReadinessBirth, required
      - `date` string, date, required: Valid Gregorian YYYY-MM-DD local civil date, inclusive 1800-01-01 through 2200-12-31. Calendar validity and timezone conversion are checked by the server.
      - `time` string, required: HH:MM or HH:MM:SS; no offset in this field. Use timezone to select the civil-time zone.
      - `timezone` string, required
      - `lat` number, required
      - `lon` number, required
    - `profile` union, required
      - object
        - `zodiac` 'tropical', required
      - object
        - `zodiac` 'sidereal', required
        - `ayanamsa` 'lahiri' | 'raman' | 'krishnamurti' | 'fagan_bradley' | 'yukteshwar' | 'sassanian' | 'true_chitra' | 'true_revati' | 'true_pushya' | 'galactic_center_0_sagittarius' | 'galactic_alignment_mardyks', required
    - `points` AspectPolicyStabilityPoint[]
    - `policies` AspectPolicyStabilityPolicy[], required
      - `id` string, required
      - `aspects` NatalAnalysisAspectOption[], required
        - `aspect` 'conjunction' | 'semisextile' | 'semisquare' | 'sextile' | 'quintile' | 'square' | 'trine' | 'sesquiquadrate' | 'biquintile' | 'quincunx' | 'opposition', required
        - `max_orb_degrees` number, required
  - HistoricalAspectPolicyStabilityRequest: Explicit historical mode, 1000 BCE (BC)–2500 CE (AD). No year zero, implicit calendar, UTC or IANA zone. Preserve tool-specific mathematical, geographic and search limits; calendar/time conventions and estimated Delta-T are not certified historical accuracy.
    - `birth` HistoricalBirthInput, required
      - `date` HistoricalDate, required: Explicit civil date, 1000 BCE (BC)–2500 CE (AD); no year zero. Calendar validity is checked by the server. Available only on documented connected historical operations, with explicit UT1/fixed-offset conventions.
        - `year` integer, required
        - `era` 'BCE' | 'CE', required: Display BCE (BC) / CE (AD); API values remain BCE / CE. No year zero.
        - `month` integer, required
        - `day` integer, required
        - `calendar` 'proleptic_gregorian' | 'proleptic_julian', required: Explicit choice; applies the selected calendar rules throughout history without a regional adoption switch.
      - `time` string, required: Explicit HH:MM[:SS]; whole seconds only, no leap seconds. Normalized helper output includes seconds.
      - `timezone` string, required: Explicit UT1 or fixed offset UT1+/-HH:MM[:SS], within 14 hours. Local clock minus offset yields UT1, not UTC. No IANA timezone inference. Original offset spelling is preserved.
      - `lat` number, required
      - `lon` number, required
    - `profile` union, required
      - object
        - `zodiac` 'tropical', required
      - object
        - `zodiac` 'sidereal', required
        - `ayanamsa` 'lahiri' | 'raman' | 'krishnamurti' | 'fagan_bradley' | 'yukteshwar' | 'sassanian' | 'true_chitra' | 'true_revati' | 'true_pushya' | 'galactic_center_0_sagittarius' | 'galactic_alignment_mardyks', required
    - `points` string[]
    - `policies` object[], required
      - `id` string, required
      - `aspects` object[], required
        - `aspect` 'conjunction' | 'semisextile' | 'semisquare' | 'sextile' | 'quintile' | 'square' | 'trine' | 'sesquiquadrate' | 'biquintile' | 'quincunx' | 'opposition', required
        - `max_orb_degrees` number, required

## Response `200`

Bounded cross-policy aspect admission audit

- union
  - AspectPolicyStabilityResponse
    - `type` 'aspect_policy_stability', required
    - `status` 'current', required
    - `input` object, required
      - `birth` Input, required (unresolved $ref)
      - `profile` Profile, required (unresolved $ref)
      - `points` AspectPolicyStabilityPoint[], required
      - `policies` AspectPolicyStabilityPolicy[], required
        - `id` string, required
        - `aspects` NatalAnalysisAspectOption[], required
          - `aspect` 'conjunction' | 'semisextile' | 'semisquare' | 'sextile' | 'quintile' | 'square' | 'trine' | 'sesquiquadrate' | 'biquintile' | 'quincunx' | 'opposition', required
          - `max_orb_degrees` number, required
    - `positions` AspectPolicyStabilityPositions, required
      - `sun` number
      - `moon` number
      - `mercury` number
      - `venus` number
      - `mars` number
      - `jupiter` number
      - `saturn` number
      - `uranus` number
      - `neptune` number
      - `pluto` number
    - `evaluations` AspectPolicyStabilityEvaluation[], required
      - `body_a` 'sun' | 'moon' | 'mercury' | 'venus' | 'mars' | 'jupiter' | 'saturn' | 'uranus' | 'neptune' | 'pluto', required
      - `body_b` 'sun' | 'moon' | 'mercury' | 'venus' | 'mars' | 'jupiter' | 'saturn' | 'uranus' | 'neptune' | 'pluto', required
      - `aspect` 'conjunction' | 'semisextile' | 'semisquare' | 'sextile' | 'quintile' | 'square' | 'trine' | 'sesquiquadrate' | 'biquintile' | 'quincunx' | 'opposition', required
      - `exact_angle_degrees` number, required
      - `separation_degrees` number, required
      - `orb_degrees` number, required
      - `admitted_policy_count` integer, required
      - `admission_ratio` number, required
      - `stable_across_policies` boolean, required
      - `policy_dependent` boolean, required
      - `policy_results` AspectPolicyStabilityPolicyEvaluation[], required
        - `policy_id` string, required
        - `status` 'admitted' | 'outside_orb' | 'not_configured', required
        - `max_orb_degrees` number, nullable, required
        - `margin_degrees` number, nullable, required
        - `admitted` boolean, required
    - `policy_results` AspectPolicyStabilityPolicyResult[], required
      - `policy_id` string, required
      - `admitted_aspect_count` integer, required
      - `aspect_set_sha256` string, required
    - `policy_groups` AspectPolicyStabilityPolicyGroup[], required
      - `aspect_set_sha256` string, required
      - `policy_ids` string[], required
      - `admitted_aspect_count` integer, required
    - `summary` object, required
      - `point_count` integer, required
      - `policy_count` integer, required
      - `candidate_aspect_count` integer, required
      - `stable_aspect_count` integer, required
      - `policy_dependent_aspect_count` integer, required
      - `policy_group_count` integer, required
    - `metadata` object, required
      - `model` 'cosmicephemeris-aspect-policy-stability-v1', required
      - `single_chart_calculation` unknown, required
      - `candidate_rows_only` unknown, required
      - `all_rejected_candidates_omitted` unknown, required
      - `max_policies` 4, required
      - `max_policy_aspect_evaluations` 1980, required
      - `inclusive_orb_boundary` unknown, required
      - `unweighted_policies` unknown, required
      - `strengths` unknown, required
      - `confidence` unknown, required
      - `recommendations` unknown, required
      - `interpretations` unknown, required
      - `predictions` unknown, required
      - `request_time_network` unknown, required
    - `receipt` CalculationReceipt
      - `schema` 'cosmicephemeris-calculation-receipt-v1', required
      - `kid` string, required
      - `algorithm` 'Ed25519', required
      - `canonicalization` 'cosmicephemeris-canonical-data-v1', required
      - `input_normalization` 'public-request-canonical-data-v1', required
      - `route` string, required
      - `release` string, required
      - `issued_at` string, date-time, required
      - `normalized_input_sha256` string, required
      - `result_sha256` string, required
      - `calculation_profile` object, required
      - `service_dataset_versions` object, required
      - `calculation_fingerprint` string, required
      - `verification_uri` string, required
      - `signature` string, required
  - HistoricalAspectPolicyStabilityAspectPolicyStabilityResponse
    - `schema` 'cosmicephemeris-historical-calculation-v1', required
    - `status` 'historical', required
    - `type` 'aspect-policy-stability', required
    - `input` HistoricalAspectPolicyStabilityRequest, required: Explicit historical mode, 1000 BCE (BC)–2500 CE (AD). No year zero, implicit calendar, UTC or IANA zone. Preserve tool-specific mathematical, geographic and search limits; calendar/time conventions and estimated Delta-T are not certified historical accuracy.
      - `birth` HistoricalBirthInput, required
        - `date` HistoricalDate, required: Explicit civil date, 1000 BCE (BC)–2500 CE (AD); no year zero. Calendar validity is checked by the server. Available only on documented connected historical operations, with explicit UT1/fixed-offset conventions.
          - `year` integer, required
          - `era` 'BCE' | 'CE', required: Display BCE (BC) / CE (AD); API values remain BCE / CE. No year zero.
          - `month` integer, required
          - `day` integer, required
          - `calendar` 'proleptic_gregorian' | 'proleptic_julian', required: Explicit choice; applies the selected calendar rules throughout history without a regional adoption switch.
        - `time` string, required: Explicit HH:MM[:SS]; whole seconds only, no leap seconds. Normalized helper output includes seconds.
        - `timezone` string, required: Explicit UT1 or fixed offset UT1+/-HH:MM[:SS], within 14 hours. Local clock minus offset yields UT1, not UTC. No IANA timezone inference. Original offset spelling is preserved.
        - `lat` number, required
        - `lon` number, required
      - `profile` union, required
        - object
          - `zodiac` 'tropical', required
        - object
          - `zodiac` 'sidereal', required
          - `ayanamsa` 'lahiri' | 'raman' | 'krishnamurti' | 'fagan_bradley' | 'yukteshwar' | 'sassanian' | 'true_chitra' | 'true_revati' | 'true_pushya' | 'galactic_center_0_sagittarius' | 'galactic_alignment_mardyks', required
      - `points` string[]
      - `policies` object[], required
        - `id` string, required
        - `aspects` object[], required
          - `aspect` 'conjunction' | 'semisextile' | 'semisquare' | 'sextile' | 'quintile' | 'square' | 'trine' | 'sesquiquadrate' | 'biquintile' | 'quincunx' | 'opposition', required
          - `max_orb_degrees` number, required
    - `result` object, required: Complete historical calculation adapter result. Times are explicit UT1 date records, never UTC strings; derived times may include fractional seconds and years outside the input range.
    - `metadata` object, required
      - `time_standard` 'UT1', required
      - `historical_accuracy_certified` unknown, required
      - `warnings` string[], required

## Other responses

- `400`: Invalid request, malformed JSON, out-of-range date/location, unknown model, invalid timezone or ambiguous/nonexistent clock-change time. Invalid attempts reaching quota reservation consume one unit.
- `401`: Missing, invalid, revoked API key or unavailable activated key owner. Dashboard cookies do not authenticate calculation routes.
- `403`: Origin not allowed by production CORS policy. Server-to-server requests can omit Origin.
- `429`: Monthly quota exhausted, per-user two-request concurrency reached, or nginx rate/connection admission refused. Retry-After: 2 is sent for application per-user concurrency only, not a promise that monthly quota resets in two seconds.
- `502`: Engine unavailable, unsuccessful internal server response or invalid upstream JSON. No engine internals are exposed.
- `503`: Four-request global calculation pool full (Retry-After: 2), maintenance or upstream service unavailable.
- `504`: Application engine timeout: 15 seconds normally; planetary events, house ingresses, aspect windows, event calendar, eclipse geometry, electional search, and event-rule search use 30 seconds; Nakshatra Timeline plus the explicitly enumerated readiness, robustness, location, uncertainty, and electional-audit family use 60 seconds. Timer includes response-body parsing; an admitted timeout consumes quota.

---

[API](https://skmtc.dev/cosmicephemeris/apis/cosmic-ephemeris-calculation-api.md) · [All operations](https://skmtc.dev/cosmicephemeris/apis/cosmic-ephemeris-calculation-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cosmicephemeris/apis/cosmic-ephemeris-calculation-api/revisions/f041e924cea3?raw)
