---
title: "Gate chart workflows against birth-time data quality"
method: POST
path: "/api/astro/chart-input-readiness"
tags: ["Calculations"]
---

# Gate chart workflows against birth-time data quality

`POST /api/astro/chart-input-readiness`

## Request

- Base URL: `https://api.cosmicephemeris.com`
- URL: `https://api.cosmicephemeris.com/api/astro/chart-input-readiness`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Classifies exact, approximate, or unknown birth-time input before a developer launches downstream chart workflows. Exact local times are resolved against pinned place and IANA data; repeated times retain both candidates and nonexistent times produce no facts. Approximate and unknown times expose explicitly sampled, non-exhaustive fact evidence while exact-chart routes remain blocked. The response never selects a representative time, rectifies a chart, ranks a convention, or returns statistical confidence. No request-time network access. 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
  - ChartInputReadinessRequest
    - `place_id` string, required
    - `birth_time` union, required
      - ChartInputReadinessExactTime
        - `status` 'exact', 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.
      - ChartInputReadinessApproximateTime
        - `status` 'approximate', 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.
        - `uncertainty_minutes` integer, required
      - ChartInputReadinessUnknownTime
        - `status` 'unknown', 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.
    - `profile` ConventionProfile, required
      - `zodiac` 'tropical' | 'sidereal', required
      - `ayanamsa` 'lahiri' | 'raman' | 'krishnamurti' | 'fagan_bradley' | 'yukteshwar' | 'sassanian' | 'true_chitra' | 'true_revati' | 'true_pushya' | 'galactic_center_0_sagittarius' | 'galactic_alignment_mardyks'
      - `house_system` 'equal' | 'whole_sign' | 'placidus', required
  - HistoricalChartInputReadinessRequest: 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.
    - `place_id` string, required
    - `birth_time` union, required
      - object
        - `status` 'exact', 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: HH:MM or HH:MM:SS; no offset in this field. Use timezone to select the civil-time zone.
      - object
        - `status` 'approximate', 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: HH:MM or HH:MM:SS; no offset in this field. Use timezone to select the civil-time zone.
        - `uncertainty_minutes` integer, required
      - object
        - `status` 'unknown', 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.
    - `profile` object, required
      - `zodiac` 'tropical' | 'sidereal', required
      - `ayanamsa` 'lahiri' | 'raman' | 'krishnamurti' | 'fagan_bradley' | 'yukteshwar' | 'sassanian' | 'true_chitra' | 'true_revati' | 'true_pushya' | 'galactic_center_0_sagittarius' | 'galactic_alignment_mardyks'
      - `house_system` 'equal' | 'whole_sign' | 'placidus', required
    - `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.

## Response `200`

Machine-readable workflow readiness and bounded chart-fact evidence

- union
  - ChartInputReadinessResponse
    - `type` 'chart_input_readiness', required
    - `status` 'current', required
    - `birth_time_status` 'exact' | 'approximate' | 'unknown', required
    - `profile` CivilTimeAuditProfile, required
      - `zodiac` 'tropical' | 'sidereal', required
      - `ayanamsa` 'lahiri' | 'raman' | 'krishnamurti' | 'fagan_bradley' | 'yukteshwar' | 'sassanian' | 'true_chitra' | 'true_revati' | 'true_pushya' | 'galactic_center_0_sagittarius' | 'galactic_alignment_mardyks', required
      - `house_system` 'equal' | 'whole_sign' | 'placidus', required
    - `resolution` object, required
    - `exact_chart_ready` boolean, required
    - `next_action` 'run_exact_birth_calculation' | 'select_civil_time_candidate' | 'correct_local_time' | 'resolve_approximate_center' | 'use_uncertainty_workflow_or_supply_exact_time', required
    - `workflows` ChartInputReadinessWorkflow[], required
      - `id` 'exact_birth_calculations' | 'civil_time_audit' | 'birth_time_sensitivity' | 'chart_robustness', required
      - `routes` string[], required
      - `status` 'ready' | 'blocked' | 'not_applicable', required
      - `reason_code` string, required
      - `additional_route_inputs_required` boolean, required
    - `fact_evidence` ChartInputReadinessFact[], required
      - `id` string, required
      - `status` 'resolved' | 'candidate_stable' | 'candidate_variable' | 'observed_stable' | 'observed_variable', required
      - `values` union[], required
        - union
          - string
          - integer
    - `summary` object, required
      - `fact_count` integer, required
      - `status_counts` object, required
    - `evidence` object, nullable, required
    - `metadata` object, 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
  - HistoricalChartInputReadinessChartInputReadinessResponse
    - `schema` 'cosmicephemeris-historical-calculation-v1', required
    - `status` 'historical', required
    - `type` 'chart-input-readiness', required
    - `input` HistoricalChartInputReadinessRequest, 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.
      - `place_id` string, required
      - `birth_time` union, required
        - object
          - `status` 'exact', 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: HH:MM or HH:MM:SS; no offset in this field. Use timezone to select the civil-time zone.
        - object
          - `status` 'approximate', 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: HH:MM or HH:MM:SS; no offset in this field. Use timezone to select the civil-time zone.
          - `uncertainty_minutes` integer, required
        - object
          - `status` 'unknown', 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.
      - `profile` object, required
        - `zodiac` 'tropical' | 'sidereal', required
        - `ayanamsa` 'lahiri' | 'raman' | 'krishnamurti' | 'fagan_bradley' | 'yukteshwar' | 'sassanian' | 'true_chitra' | 'true_revati' | 'true_pushya' | 'galactic_center_0_sagittarius' | 'galactic_alignment_mardyks'
        - `house_system` 'equal' | 'whole_sign' | 'placidus', required
      - `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.
    - `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)
