---
title: "AI Synastry Narrative"
method: POST
path: "/reports/ai/synastry-narrative"
tags: ["AI Reports"]
---

# AI Synastry Narrative

`POST /reports/ai/synastry-narrative`

Long-form relationship narrative grounded in cross-chart aspects. Inputs: chart1, chart2, language, tone, length.

## Headers

- `X-Provider` 'openai' | 'anthropic' | 'google' | 'groq' | 'mistral' | 'openrouter' | 'deepseek' | 'together'
- `X-Provider-Key` string
- `X-Provider-Model` string

## Request body

- Synastry
  - `chart1` ChartInput, required — Birth data for a single natal chart. Required: date (YYYY-MM-DD), time (HH:mm:ss), latitude and longitude in decimal degrees. The short forms lat, lon, lng and tz are rejected with 400 INVALID_FIELD; pass the full names. timezoneOffset is hours from UTC and defaults to 0, meaning UTC. city is a display label only: nothing here geocodes it, so it never stands in for coordinates.
    - `date` string, required
    - `time` string, required
    - `timezoneOffset` number, nullable — Hours from UTC at the given moment, not minutes. Fractional zones are hours too: 5.5 for India, 5.75 for Nepal, -3.5 for Newfoundland. Defaults to 0, meaning UTC.
    - `latitude` number, required
    - `longitude` number, required
    - `houseSystem` string
    - `name` string
    - `city` string
    - `zodiacType` 'tropical' | 'sidereal'
    - `ayanamsaId` number, nullable
    - `ayanamsa` 'fagan-bradley' | 'lahiri' | 'de-luce' | 'raman' | 'krishnamurti' | 'kp' | 'yukteshwar' | 'jn-bhasin' | 'true-citra' | 'djwhal-khul' — Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either.
    - `cosmogram` boolean
  - `chart2` ChartInput, required — Birth data for a single natal chart. Required: date (YYYY-MM-DD), time (HH:mm:ss), latitude and longitude in decimal degrees. The short forms lat, lon, lng and tz are rejected with 400 INVALID_FIELD; pass the full names. timezoneOffset is hours from UTC and defaults to 0, meaning UTC. city is a display label only: nothing here geocodes it, so it never stands in for coordinates.
    - `date` string, required
    - `time` string, required
    - `timezoneOffset` number, nullable — Hours from UTC at the given moment, not minutes. Fractional zones are hours too: 5.5 for India, 5.75 for Nepal, -3.5 for Newfoundland. Defaults to 0, meaning UTC.
    - `latitude` number, required
    - `longitude` number, required
    - `houseSystem` string
    - `name` string
    - `city` string
    - `zodiacType` 'tropical' | 'sidereal'
    - `ayanamsaId` number, nullable
    - `ayanamsa` 'fagan-bradley' | 'lahiri' | 'de-luce' | 'raman' | 'krishnamurti' | 'kp' | 'yukteshwar' | 'jn-bhasin' | 'true-citra' | 'djwhal-khul' — Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either.
    - `cosmogram` boolean
  - `language` 'uk' | 'en' | 'de' | 'ru' | 'pl' | 'es' | 'pt' | 'hi' | 'fr' | 'ko' | 'it' | 'ja' | 'id' | 'tr' | 'nl' | 'ro' | 'cs' | 'vi' | 'ar' | 'el' | 'hu'
  - `tone` 'warm' | 'professional' | 'concise'
  - `length` 'short' | 'medium' | 'long'

## Response `200`

Successful calculation

- object
  - `ok` boolean
  - `data` object
    - `narrative` string, nullable
    - `disclaimer` string, nullable
    - `model` string, nullable
    - `tokens` object, nullable
      - `input` number, nullable
      - `output` number, nullable

## Other responses

- `400` — Validation error
- `401` — Missing or invalid API key

---

[API](https://skmtc.net/astroway/apis/astroway-calculation-api.md) · [All operations](https://skmtc.net/astroway/apis/astroway-calculation-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/astroway/astroway-calculation-api/revisions/529d7d36d7d6/schema)
