{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/asterwise-com/json-schema/asterwise-com-western-transit-request-schema.json",
  "title": "WesternTransitRequest",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/asterwise-com-openapi.json#/components/schemas/WesternTransitRequest",
  "properties": {
    "location": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Location",
      "description": "City name to resolve to lat/lon/tz automatically. Example: 'Mumbai' or 'New Delhi, India'. If provided, latitude, longitude and timezone are not required."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "title": "Name",
      "description": "Person name associated with the birth record",
      "default": "Chart"
    },
    "date": {
      "type": "string",
      "title": "Date",
      "description": "Birth date in YYYY-MM-DD format"
    },
    "time": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Time",
      "description": "Birth time in HH:MM 24-hour format. If omitted, the chart is cast for 06:00 local time (not a sunrise chart) and birth_time_provided is false: houses, the Ascendant, the sect and the Moon's exact degree are then approximate."
    },
    "latitude": {
      "anyOf": [
        {
          "type": "number",
          "maximum": 90.0,
          "minimum": -90.0
        },
        {
          "type": "null"
        }
      ],
      "title": "Latitude",
      "description": "Latitude. Required if location not provided."
    },
    "longitude": {
      "anyOf": [
        {
          "type": "number",
          "maximum": 180.0,
          "minimum": -180.0
        },
        {
          "type": "null"
        }
      ],
      "title": "Longitude",
      "description": "Longitude. Required if location not provided."
    },
    "timezone": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Timezone",
      "description": "IANA timezone. Required if location not provided (unless utc_offset is given). For dates before the zone adopted a standard time, the birthplace's local mean time (longitude / 15 hours) is used."
    },
    "utc_offset": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Utc Offset",
      "description": "Optional explicit UTC offset of the birth time, as ±HH:MM or ±HH:MM:SS (e.g. '+04:51:31' for Bombay mean time). Overrides the offset `timezone` would give. Use it when the birth record states the offset, or for historical local times the IANA database cannot represent."
    },
    "ayanamsa": {
      "type": "string",
      "enum": [
        "lahiri",
        "raman",
        "kp",
        "tropical"
      ],
      "title": "Ayanamsa",
      "description": "Ignored on Western endpoints: positions are always tropical (no ayanamsa). Accepted so one birth object can be sent to Vedic and Western endpoints alike.",
      "default": "lahiri"
    },
    "house_system": {
      "type": "string",
      "enum": [
        "placidus",
        "koch",
        "equal",
        "whole_sign"
      ],
      "title": "House System",
      "description": "House system for the natal houses that transiting planets are placed in (natal_house on each transit planet). Same choices as the natal chart; Placidus is the default.",
      "default": "placidus"
    },
    "snapshot_time": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Snapshot Time",
      "description": "Local clock time (HH:MM) at which each day's sky is read, in snapshot_timezone. Default: 12:00 UTC, as before. Pass the user's own time so the Moon and the fast planets are where the user sees them."
    },
    "snapshot_timezone": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Snapshot Timezone",
      "description": "IANA timezone for snapshot_time. Defaults to the birth timezone when snapshot_time is given."
    },
    "start_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Start Date",
      "description": "Transit reference date (YYYY-MM-DD): snapshot day for daily transits; window start for weekly (7 days) and monthly (30 days). Defaults to today."
    }
  },
  "type": "object",
  "required": [
    "date"
  ]
}