---
title: "Generate Natal Report (PDF or HTML)"
method: POST
path: "/reports/natal"
tags: ["Reports"]
---

# Generate Natal Report (PDF or HTML)

`POST /reports/natal`

Render a Western tropical natal chart as a single-page A4 PDF (default) or live HTML (add `?format=html`). Includes Big Three (Sun/Moon/ASC), full planets table with houses + retrograde, all 12 house cusps, and major aspects. Set `whitelabel: true` to apply the caller's branding overrides. Languages: `uk` (default) or `en`. PDF URLs valid 24h via auto-cleanup cron; HTML mode streams directly without storage.

## Request body

- NatalReport
  - `chart` ChartInput, required — Birth data for a single natal chart. Required: date (YYYY-MM-DD), time (HH:mm:ss). Coordinates are latitude and longitude in decimal degrees, plus timezoneOffset in hours from UTC; the short forms lat, lon, lng and tz are rejected with 400 INVALID_FIELD. Omitting the coordinates is not the same as skipping them: houses, angles and everything derived from them are then computed for 0°N 0°E at UTC, which is a wrong answer rather than a neutral default.
    - `date` string, required
    - `time` string, required
    - `timezoneOffset` number, nullable
    - `latitude` number, nullable
    - `longitude` number, nullable
    - `houseSystem` string
    - `name` string
    - `city` string
    - `zodiacType` 'tropical' | 'sidereal'
    - `ayanamsaId` number, nullable
    - `cosmogram` boolean
  - `language` 'uk' | 'en' | 'de' | 'ru' | 'pl' | 'es' | 'pt' | 'hi' | 'fr' | 'ko' | 'it' | 'ja' | 'id' | 'tr' | 'nl' | 'ro' | 'cs' | 'vi' | 'ar' | 'el' | 'hu'
  - `whitelabel` union
    - boolean
    - object
      - `companyName` string
      - `companyUrl` string, uri
      - `companyEmail` string, email
      - `companyMobile` string
      - `companyBio` string
      - `logoUrl` string, uri
      - `frontImage` string, uri
      - `textPrimaryColor` string
      - `textSecondaryColor` string
      - `backgroundColor` string
      - `themeColor` string — Accent colour — used for section heading text and inline emphasis.
      - `headingColor` string — Colour of the divider rule under each section heading (not the heading text — that is themeColor).
      - `footerText` string
      - `fontPairing` 'serif-sans' | 'sans-serif' | 'serif-only' | 'sans-only' | 'system'
      - `reportName` string
  - `enrich` boolean
  - `tone` 'warm' | 'professional' | 'concise'
  - `length` 'short' | 'medium' | 'long'

## Response `200`

Successful calculation

- object
  - `ok` boolean
  - `data` object
    - `url` string, nullable
    - `storage_key` string, nullable
    - `byte_length` number, nullable
    - `page_count` number, nullable
    - `duration_ms` number, nullable
    - `expires_at` string, nullable

## Other responses

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

---

[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/793e5c2dbcdf/schema)
