---
title: "Tri-Wheel (SVG)"
method: POST
path: "/render/tri-wheel"
tags: ["Visualization"]
---

# Tri-Wheel (SVG)

`POST /render/tri-wheel`

Three concentric wheels: natal + progressed + transit. Used for advanced forecasting visuals.

## Request body

- TriWheel
  - `natal` 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
    - `latitude` number, required
    - `longitude` number, required
    - `houseSystem` string
    - `name` string
    - `city` string
    - `zodiacType` 'tropical' | 'sidereal'
    - `ayanamsaId` number, nullable
    - `cosmogram` boolean
  - `middle` 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
    - `latitude` number, required
    - `longitude` number, required
    - `houseSystem` string
    - `name` string
    - `city` string
    - `zodiacType` 'tropical' | 'sidereal'
    - `ayanamsaId` number, nullable
    - `cosmogram` boolean
  - `outer` 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
    - `latitude` number, required
    - `longitude` number, required
    - `houseSystem` string
    - `name` string
    - `city` string
    - `zodiacType` 'tropical' | 'sidereal'
    - `ayanamsaId` number, nullable
    - `cosmogram` boolean
  - `options` object
    - `size` integer
    - `theme` 'light' | 'dark' | 'console'
    - `showAspects` boolean
    - `showRetrograde` boolean
    - `title` string
    - `format` 'svg' | 'json'
    - `middleLabel` string
    - `outerLabel` string

## Response `200`

Successful calculation

- object
  - `ok` boolean
  - `data` object
    - `svg` string, nullable
    - `format` string, nullable
    - `byteLength` number, nullable

## Other responses

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

## Changes

- **2026-08-11** `b0533bcc12c0` — 12 breaking, 12 warning, 6 info
  - the request property `middle/latitude` became not nullable
  - the request property `middle/longitude` became not nullable
  - the request property `natal/latitude` became not nullable
  - the request property `natal/longitude` became not nullable
  - …26 more

[Change history](https://skmtc.dev/astroway/apis/astroway-calculation-api/changes/render/tri-wheel/post.md)

---

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