Call this server's tools from your browser. Nothing to install.
https://mcp.astroway.info/mcp/reports
Bearer followed by your AstroWay API key (aw_live_* or aw_test_*), from api.astroway.info/dashboard
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
astroway_account_status Read-only
Check current API key status: tier, credit balance, rate limits, monthly cycle reset. Run this BEFORE invoking expensive endpoints (Tier 4+ at 100+ credits, Tier 6/7 at 500-5000 credits) to confirm the user has budget. Returns plain-text human-readable summary.
This tool takes no arguments.
Tools (42)
astroway_account_status
Check current API key status: tier, credit balance, rate limits, monthly cycle reset. Run this BEFORE invoking expensive endpoints (Tier 4+ at 100+ credits, Tier 6/7 at 500-5000 credits) to confirm the user has budget. Returns plain-text human-readable summary.
Tool definitions for an agent framework, generated from the live OpenAPI document, so the schema a model fills is the schema the endpoint validates. `format=openai` (default) returns `{ type, function }` objects you can spread straight into a chat completion; `format=anthropic` returns `{ name, description, input_schema }`. The objects carry nothing of ours: how to call each tool lives in a separate `executors` map keyed by tool name, because an unexpected key inside a vendor tool object is a 400 at their end.
[Group: Agent Platform]
[Endpoint: GET /v1/agent/tools]
[Cost: see your plan — endpoint not in the public credit manifest]
read-only
Argument
Type
Description
q
string
Free-text filter applied within the selection, matched against path, summary, description and group.
limit
integer
How many tools to return. The ceiling is the OpenAI limit of 128 functions per request; models degrade well before it. Anything left out is counted in `totalMatched`.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
format
string
Which vendor contract the tool objects follow. `openai` returns `{ type, function }`, `anthropic` returns `{ name, description, input_schema }`.
select
string
What to hand over: `starter` (the curated set, the default), `all`, `group:<tag>` such as `group:Vedic`, or `paths:/chart,/synastry` for an explicit list. An unknown path is named in `notes` rather than dropped.
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"q": {
"type": "string",
"maxLength": 120,
"description": "Free-text filter applied within the selection, matched against path, summary, description and group."
},
"limit": {
"type": "integer",
"default": 32,
"maximum": 128,
"minimum": 1,
"description": "How many tools to return. The ceiling is the OpenAI limit of 128 functions per request; models degrade well before it. Anything left out is counted in `totalMatched`."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"format": {
"enum": [
"openai",
"anthropic"
],
"type": "string",
"default": "openai",
"description": "Which vendor contract the tool objects follow. `openai` returns `{ type, function }`, `anthropic` returns `{ name, description, input_schema }`."
},
"select": {
"type": "string",
"default": "starter",
"description": "What to hand over: `starter` (the curated set, the default), `all`, `group:<tag>` such as `group:Vedic`, or `paths:/chart,/synastry` for an explicit list. An unknown path is named in `notes` rather than dropped."
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
astroway_cost_estimate
Estimate the credit cost of one or more endpoints WITHOUT invoking them. Returns total + per-endpoint breakdown with tier annotations. Useful when planning multi-step workflows: estimate first, ask user confirmation, then invoke. Cache TTL 5 min.
read-only
Argument
Type
Description
endpoints*
array
Endpoint paths to estimate, e.g. ["/chart", "/synastry", "/reports/natal"]. Leading slash optional.
2 personas debate a topic, multi-round transcript.
[Group: MCP Advanced]
[Endpoint: POST /v1/mcp/agent-debate]
[Required: topic, agentA, agentB]
[Cost: 100 credits (Tier 4)]
read-only
Argument
Type
Description
chart
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
topic*
string
agentA*
string
agentB*
string
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
rounds
integer
astroway_mcp_agent_pool_status
8 personas with specialties.
[Group: MCP Advanced]
[Endpoint: GET /v1/mcp/agent-pool-status]
[Cost: 10 credits (Tier 1)]
read-only
Argument
Type
Description
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
astroway_mcp_ai_chat
Chat answered from the positions we computed for this birth moment, not from the model's memory of a sun sign. Carries up to 10 turns of history, replies in 21 languages, and takes four voices through `persona`. Send your own provider key and the turn costs 5 credits instead of the endpoint price.
[Group: AI & MCP]
[Endpoint: POST /v1/ai/chat]
[Required: message]
[Cost: 100 credits (Tier 4)]
read-only
Argument
Type
Description
chart
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
history
array
message*
string
persona
string
astroway_mcp_ai_comparison_coach
Coach two charts on relationship dynamics.
[Group: AI & MCP]
[Endpoint: POST /v1/ai/comparison-coach]
[Required: chart1, chart2, question]
[Cost: 100 credits (Tier 4)]
read-only
Argument
Type
Description
chart1*
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
chart2*
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
astroway_mcp_ai_explain_aspect
Detailed explanation of an aspect between two planets.
[Group: AI & MCP]
[Endpoint: POST /v1/ai/explain-aspect]
[Required: planet1, planet2, aspectType]
[Cost: 100 credits (Tier 4)]
read-only
Argument
Type
Description
chart
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
planet1*
string
planet2*
string
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
astroway_mcp_ai_explain_transit
Explain a current transit hitting your natal chart.
[Group: AI & MCP]
[Endpoint: POST /v1/ai/explain-transit]
[Required: chart, transitDate, transitPlanet, natalPlanet, aspectType]
[Cost: 100 credits (Tier 4)]
read-only
Argument
Type
Description
chart*
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
aspectType*
string
astroway_mcp_multi_agent_coordinate
Run N personas in parallel + LLM synthesis.
[Group: MCP Advanced]
[Endpoint: POST /v1/mcp/multi-agent-coordinate]
[Required: question, agents]
[Cost: 100 credits (Tier 4)]
read-only
Argument
Type
Description
chart
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
agents*
array
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
question*
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
astroway_mcp_multi_chart_context
Compact context for MCP agents working across multiple charts.
[Group: AI & MCP]
[Endpoint: POST /v1/mcp/multi-chart-context]
[Required: charts]
[Cost: 10 credits (Tier 1)]
read-only
Argument
Type
Description
charts*
array
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
intent
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"charts"
],
"properties": {
"charts": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"maxItems": 6,
"minItems": 1
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"intent": {
"enum": [
"compatibility",
"family",
"group",
"forecast"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
astroway_mcp_rag_search
Keyword-tag scoring over chart chunks.
[Group: MCP Advanced]
[Endpoint: POST /v1/mcp/rag-search]
[Required: query, chart]
[Cost: 10 credits (Tier 1)]
read-only
Argument
Type
Description
topK
integer
chart*
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
query*
string
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
astroway_mcp_streaming
Server-Sent Events streaming chat completion with optional chart context.
[Group: AI & MCP]
[Endpoint: POST /v1/mcp/streaming]
[Required: message]
[Cost: 100 credits (Tier 4)]
read-only
Argument
Type
Description
chart
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
message*
string
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
astroway_mcp_tool_call_stream
SSE-stream of a tool call envelope.
[Group: MCP Advanced]
[Endpoint: POST /v1/mcp/tool-call-stream]
[Required: tool]
[Cost: 10 credits (Tier 1)]
read-only
Argument
Type
Description
args
object
tool*
string
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tool"
],
"properties": {
"args": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"tool": {
"type": "string",
"maxLength": 80,
"minLength": 2
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"ru",
"es",
"pl",
"de",
"fr",
"it",
"pt"
],
"type": "string",
"default": "en"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
astroway_mcp_tools_list
Auto-generated tool manifest for MCP clients (modelcontextprotocol/2025-03 spec).
[Group: AI & MCP]
[Endpoint: GET /v1/mcp/tools-list]
[Cost: see your plan — endpoint not in the public credit manifest]
read-only
Argument
Type
Description
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
astroway_reports_ai_monthly_narrative
Single-month forecast. Tighter scope than year-ahead: uses fast and slow planet transits within the month. Inputs: chart, year, month (1-12), language, tone, length.
[Group: AI Reports]
[Endpoint: POST /v1/reports/ai/monthly-narrative]
[Required: chart, year, month]
[Cost: 250 credits (Tier 5)] ⚠️ Heavy — confirm with user before invoking.
Argument
Type
Description
tone
string
year*
integer
chart*
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
month*
integer
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
length
string
astroway_reports_ai_natal_narrative
Long-form natal-chart narrative (markdown). Inputs: chart, language (21 codes), tone (warm/professional/concise), length (short/medium/long; ≤3200 tokens). Returns the narrative text plus model and token usage. AI grounded on the computed natal chart: Sun/Moon/Asc, 13 bodies, 12 houses, ≤25 major aspects.
[Group: AI Reports]
[Endpoint: POST /v1/reports/ai/natal-narrative]
[Required: chart]
[Cost: 250 credits (Tier 5)] ⚠️ Heavy — confirm with user before invoking.
Argument
Type
Description
tone
string
chart*
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
length
string
language
string
precision
astroway_reports_ai_synastry_narrative
Long-form relationship narrative grounded in cross-chart aspects. Inputs: chart1, chart2, language, tone, length.
[Group: AI Reports]
[Endpoint: POST /v1/reports/ai/synastry-narrative]
[Required: chart1, chart2]
[Cost: 250 credits (Tier 5)] ⚠️ Heavy — confirm with user before invoking.
Argument
Type
Description
tone
string
chart1*
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
chart2*
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
astroway_reports_ai_transit_narrative
Snapshot transit interpretation for a specific date. Inputs: chart + transitDate (+optional transitTime/tzOffset), language, tone, length. Returns narrative grounded in transit-to-natal aspects (orb ≤1°).
[Group: AI Reports]
[Endpoint: POST /v1/reports/ai/transit-narrative]
[Cost: 250 credits (Tier 5)] ⚠️ Heavy — confirm with user before invoking.
Argument
Type
Description
date
string
time
string
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
ayanamsa
string
Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either.
timezone
string
IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known.
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
astroway_reports_ai_year_ahead_narrative
Long-form annual report. Combines natal context with the year's major outer-planet transits clustered by month. Inputs: chart, year (default = next year), language, tone, length (use long for full annual report).
[Group: AI Reports]
[Endpoint: POST /v1/reports/ai/year-ahead-narrative]
[Required: chart]
[Cost: 250 credits (Tier 5)] ⚠️ Heavy — confirm with user before invoking.
Argument
Type
Description
tone
string
year
integer
chart*
object
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
length
string
language
string
astroway_reports_business
Founding-chart analysis (mundane astrology). Highlights Sun (purpose), MC (reputation), Jupiter (growth), Saturn (structure). Disclaimer: "not financial advice".
[Group: Reports]
[Endpoint: POST /v1/reports/business]
[Required: chart]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
Input schema (JSON)
astroway_reports_career
Career-themed natal: MC, 10th-house cusp, Saturn placement, Mars motivation, aspects to Sun. Self-knowledge tool, not directive.
[Group: Reports]
[Endpoint: POST /v1/reports/career]
[Required: chart]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
Input schema (JSON)
astroway_reports_child
Parenting-oriented natal report. Highlights Moon (emotional core), Mercury (learning style), Venus (connection style), Mars (energy/temperament). Includes full natal data and a disclaimer noting interpretive nature.
[Group: Reports]
[Endpoint: POST /v1/reports/child]
[Required: chart]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
astroway_reports_gemstone
The ratna prescription as a multi-page A4 PDF (default) or live HTML (add `?format=html`). Same astrology as `POST /vedic/gemstones`, and pinned by a test to never disagree with it: same sidereal lagna, same two schools, same three gems. What the document adds is what a table cannot carry. Every recommended gem gets a page: what the graha it belongs to signifies classically, the basis in house ownership, mineral and substitutes, weight in ratti with gram and carat conversions, weekday, finger, metal, mantra and japa count, and **the next auspicious day to first wear it**, found by scanning th…
[Group: Reports]
[Endpoint: POST /v1/reports/gemstone]
[Required: chart]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
school
string
language
string
astroway_reports_generate
Single endpoint over the 12 type-specific renderers: pass report_type ("natal" | "transit-yearly" | "synastry" | "business" | "career" | "love" | "money" | "child" | "lal-kitab" | "human-design" | "tarot" | "vedic-kundli") plus the renderer-specific inputs. SDK ergonomics: one method instead of 12. Required fields vary by type: chart for most, chart1+chart2 for synastry, seed for tarot (chart optional).
[Group: Reports]
[Endpoint: POST /v1/reports/generate]
[Required: report_type]
[Cost: 10 credits (Tier 1)]
Argument
Type
Description
name
string
seed
any
year
integer
chart
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
depth
string
`extended` (10000 credits) adds the chart wheel and a chapter for each of Sun to Pluto, Chiron and the Ascendant in its sign, from edited texts with no AI at request time. Available in the 20 languages of `/v1/natal-texts`.
astroway_reports_history
List the calling key's most recently generated PDF reports: type, byte size, page count, language, created/expiry timestamps and a `url`. Re-fetch a report link while it lives (24 h, or the `retain_days` the report was made with), or surface recent exports in a dashboard. PDFs are purged after 24h, so older items return `expired: true` with a now-dead URL. Free to call. Query `?limit=` (1–50, default 10).
[Group: Reports]
[Endpoint: GET /v1/reports/history]
[Cost: see your plan — endpoint not in the public credit manifest]
Argument
Type
Description
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
astroway_reports_human_design
Bodygraph PDF: Type, Strategy, Authority, Profile, Definition, Not-Self theme, Incarnation Cross + 9 centers (defined/open) + activated channels with gate pairs.
[Group: Reports]
[Endpoint: POST /v1/reports/human-design]
[Required: chart]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
Input schema (JSON)
astroway_reports_lal_kitab
Lal Kitab analysis: Teva (graha placements with Pakka-ghar match), Kismat & Prosperity scores, detected Rins (ancestral debts) with triggers, suggested Upayas (remedies). Sidereal compute (Lahiri ayanamsa) with sign-from-Lagna house numbering per Lal Kitab convention.
[Group: Reports]
[Endpoint: POST /v1/reports/lal-kitab]
[Required: chart]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
astroway_reports_love
Romantic-relationship natal report. Highlights Venus (attraction style), Mars (desire), Moon (emotional needs), Descendant (partner profile). Disclaimer: not a prophecy.
[Group: Reports]
[Endpoint: POST /v1/reports/love]
[Required: chart]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
Input schema (JSON)
astroway_reports_money
Financial natal: 2nd house (earned income), 8th house (shared resources), Jupiter (expansion), Saturn (discipline). Disclaimer: not investment advice.
[Group: Reports]
[Endpoint: POST /v1/reports/money]
[Required: chart]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
Input schema (JSON)
astroway_reports_muhurta
Render a standard A4 report of the most auspicious dates for a chosen activity over a search window. Same window-scan engine as /vedic/muhurat/*: it scores each day by sunrise Panchang (Tithi/Vara/Nakshatra/Yoga/Karana) per Muhurta Chintamani + B.V.Raman, and lists ranked days with per-day Abhijit Muhurat and the scoring factors as the rationale. `activity` is one of the 12 from /muhurta/types. PDF default; ?format=html returns HTML.
[Group: Reports]
[Endpoint: POST /v1/reports/muhurta]
[Required: activity, search_window_start, latitude, longitude]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
topN
integer
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
activity*
string
ayanamsa
string
Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either.
language
string
latitude*
number
longitude*
number
astroway_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. `depth: "extended"` (10000 credits instead of 5000) adds the chart wheel and a chapter for each of Sun to Pluto, Chiron and the Ascendant in its sign, from edited texts in the 20 languages of `/natal-texts`; no AI at request time. Languages: `uk` (default) or `en`.
[Group: Reports]
[Endpoint: POST /v1/reports/natal]
[Required: chart]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
tone
string
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
depth
string
`extended` (10000 credits) adds the chart wheel and a chapter for each of Sun to Pluto, Chiron and the Ascendant in its sign, from edited texts with no AI at request time. Available in the 20 languages of `/v1/natal-texts`.
enrich
boolean
astroway_reports_relocation
Compare up to five places for one birth chart as a multi-page A4 PDF (default) or live HTML (add `?format=html`). Per place: the relocated ascendant and midheaven with the signed shift from birth, **which planets changed house** (the substantive difference, diffed rather than left as two tables), every astrocartography line running within 300 km with its interpretation text, and supportive/challenging scores across the 19 life categories. With more than one place a side-by-side comparison leads the document.
[Group: Reports]
[Endpoint: POST /v1/reports/relocation]
[Required: chart, locations]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
orbKm
number
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
astroway_reports_stellaforge
Render a data-rich, print-ready natal chart poster. A high-detail western wheel (colored element sectors, colored glyphs, degree labels, ASC arrow, MC marker, house cusps) plus the Sun/Moon/Rising trio, a placements table, element/modality balance bars, and the top aspects, fully deterministic, 0 AI. Three styles via `style`: `editorial` (light), `celestial` (dark + gold), `classic` (minimal). White-label via `whitelabel`. i18n via `language`. PDF default; `?format=html` returns HTML. NB `style` is read from the request BODY, not the query string.
[Group: Reports]
[Endpoint: POST /v1/reports/stellaforge]
[Required: chart]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
style
string
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
astroway_reports_synastry
Render a relationship synastry PDF: side-by-side Big Three, full cross-chart aspect table (top 40 major aspects), and per-chart + combined element/modality balance.
[Group: Reports]
[Endpoint: POST /v1/reports/synastry]
[Required: chart1, chart2]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
chart1*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
chart2*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
astroway_reports_tarot
Render a tarot reading PDF. Default spread `three-card` (Past/Present/Future from Rider-Waite-Smith deck). Available spreads: single-card, three-card, celtic-cross, horseshoe, relationship, year-ahead, decision, chakra, career, love-triangle. Pass `seed` for reproducibility (deterministic mulberry32 RNG); omit to use a daily seed. Set `allowReversed: false` to draw upright cards only.
[Group: Reports]
[Endpoint: POST /v1/reports/tarot]
[Cost: 100 credits (Tier 4)]
Argument
Type
Description
name
string
seed
any
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
spread
string
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
allowReversed
boolean
Input schema (JSON)
astroway_reports_transit_yearly
Render a year-ahead transit calendar PDF grouped by month. Includes major aspects (conjunction, sextile, square, trine, opposition) of outer planets (Mars through Pluto) to natal positions, with 0.5° max orb. Defaults to next calendar year if `year` omitted.
[Group: Reports]
[Endpoint: POST /v1/reports/transit-yearly]
[Required: chart]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
year
integer
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
astroway_reports_vedic_kundli
Sidereal Vedic chart (Lahiri ayanamsa): Lagna + Moon nakshatra/pada, all sidereal planet positions with nakshatra+pada+house, full 9-period Vimshottari Mahadasha tree with current period highlighted.
[Group: Reports]
[Endpoint: POST /v1/reports/vedic-kundli]
[Required: chart]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
Argument
Type
Description
chart*
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
astroway_whitelabel_config
Read the authenticated user's branding overrides (logo, colour palette, font, footer text, custom domain). On first access, defaults are seeded.
[Group: White-label]
[Endpoint: GET /v1/whitelabel/config]
[Cost: 10 credits (Tier 1)]
read-only
Argument
Type
Description
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
astroway_whitelabel_domain_verify
Check whether the configured custom_domain points to api.astroway.info via CNAME. Persists the result. If only A records resolve, returns them with a hint to switch to CNAME.
[Group: White-label]
[Endpoint: POST /v1/whitelabel/domain/verify]
[Cost: 10 credits (Tier 1)]
read-only
Argument
Type
Description
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
astroway_whitelabel_logo
Upload a logo as a base64 data URL (`data:image/<png|jpeg|svg+xml|webp>;base64,...`). Maximum 512 KB. Replaces any prior logo and deletes the old file from storage.
[Group: White-label]
[Endpoint: POST /v1/whitelabel/logo]
[Required: data_url]
[Cost: 10 credits (Tier 1)]
read-only
Argument
Type
Description
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
data_url*
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data_url"
],
"properties": {
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"data_url": {
"type": "string",
"pattern": "^data:image\\/(png|jpeg|svg\\+xml|webp);base64,[A-Za-z0-9+/=]+$"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
astroway_whitelabel_preview
Render a sample natal report PDF using the authenticated user's white-label configuration (colours, font, footer, logo). Pass `chart` to use your own birth data; omit to use the bundled Kyiv 1990 sample.
[Group: White-label]
[Endpoint: POST /v1/whitelabel/preview]
[Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.
read-only
Argument
Type
Description
chart
any
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"chart": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"topic",
"agentA",
"agentB"
],
"properties": {
"chart": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"topic": {
"type": "string",
"maxLength": 800,
"minLength": 4
},
"agentA": {
"type": "string"
},
"agentB": {
"type": "string"
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"rounds": {
"type": "integer",
"default": 2,
"maximum": 4,
"minimum": 1
},
"language": {
"enum": [
"uk",
"en",
"ru",
"es",
"pl",
"de",
"fr",
"it",
"pt"
],
"type": "string",
"default": "en"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"message"
],
"properties": {
"chart": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"history": {
"type": "array",
"items": {
"type": "object",
"required": [
"role",
"content"
],
"properties": {
"role": {
"enum": [
"user",
"assistant"
],
"type": "string"
},
"content": {
"type": "string",
"maxLength": 2000
}
}
},
"maxItems": 10
},
"message": {
"type": "string",
"maxLength": 2000,
"minLength": 2
},
"persona": {
"enum": [
"astrologer",
"plain",
"coach",
"teacher"
],
"type": "string",
"default": "astrologer"
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string",
"default": "uk"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
language
string
question*
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart1",
"chart2",
"question"
],
"properties": {
"chart1": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"chart2": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string",
"default": "uk"
},
"question": {
"type": "string",
"maxLength": 2000,
"minLength": 5
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
aspectType*
string
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"planet1",
"planet2",
"aspectType"
],
"properties": {
"chart": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"planet1": {
"type": "string",
"maxLength": 40,
"minLength": 2
},
"planet2": {
"type": "string",
"maxLength": 40,
"minLength": 2
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string",
"default": "uk"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"aspectType": {
"enum": [
"Conjunction",
"Sextile",
"Square",
"Trine",
"Opposition",
"Quincunx",
"Semi-square",
"Sesquiquadrate"
],
"type": "string"
}
}
}
natalPlanet*
string
transitDate*
string
transitPlanet*
string
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart",
"transitDate",
"transitPlanet",
"natalPlanet",
"aspectType"
],
"properties": {
"chart": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string",
"default": "uk"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"aspectType": {
"enum": [
"Conjunction",
"Sextile",
"Square",
"Trine",
"Opposition"
],
"type": "string"
},
"natalPlanet": {
"type": "string",
"maxLength": 40,
"minLength": 2
},
"transitDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"transitPlanet": {
"type": "string",
"maxLength": 40,
"minLength": 2
}
}
}
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"question",
"agents"
],
"properties": {
"chart": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"agents": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 4,
"minItems": 2
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"ru",
"es",
"pl",
"de",
"fr",
"it",
"pt"
],
"type": "string",
"default": "en"
},
"question": {
"type": "string",
"maxLength": 2000,
"minLength": 4
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query",
"chart"
],
"properties": {
"topK": {
"type": "integer",
"default": 5,
"maximum": 20,
"minimum": 1
},
"chart": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"query": {
"type": "string",
"maxLength": 400,
"minLength": 2
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"message"
],
"properties": {
"chart": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"message": {
"type": "string",
"maxLength": 2000,
"minLength": 2
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string",
"default": "uk"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart",
"year",
"month"
],
"properties": {
"tone": {
"enum": [
"warm",
"professional",
"concise"
],
"type": "string",
"default": "warm"
},
"year": {
"type": "integer",
"maximum": 2100,
"minimum": 1900
},
"chart": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"month": {
"type": "integer",
"maximum": 12,
"minimum": 1
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"length": {
"enum": [
"short",
"medium",
"long"
],
"type": "string",
"default": "medium"
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string",
"default": "uk"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"tone": {
"enum": [
"warm",
"professional",
"concise"
],
"type": "string",
"default": "warm"
},
"chart": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"length": {
"enum": [
"short",
"medium",
"long"
],
"type": "string",
"default": "medium"
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string",
"default": "uk"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
length
string
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart1",
"chart2"
],
"properties": {
"tone": {
"enum": [
"warm",
"professional",
"concise"
],
"type": "string",
"default": "warm"
},
"chart1": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"chart2": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"length": {
"enum": [
"short",
"medium",
"long"
],
"type": "string",
"default": "medium"
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string",
"default": "uk"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
ayanamsaId
any
timezoneOffset
any
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. Ignored when timezone is sent.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string"
},
"time": {
"type": "string"
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
}
}
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"tone": {
"enum": [
"warm",
"professional",
"concise"
],
"type": "string",
"default": "warm"
},
"year": {
"type": "integer",
"maximum": 2100,
"minimum": 1900
},
"chart": {
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"length": {
"enum": [
"short",
"medium",
"long"
],
"type": "string",
"default": "medium"
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string",
"default": "uk"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
}
}
}
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
wearingFrom
string
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"school": {
"enum": [
"lagna-lord",
"functional-benefic"
],
"type": "string"
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
},
"wearingFrom": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
}
}
chart1
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
chart2
any
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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fields
string
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
spread
string
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
report_type*
string
allowReversed
boolean
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"report_type"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100
},
"seed": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
},
"year": {
"type": "integer",
"maximum": 2100,
"minimum": 1900
},
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"depth": {
"enum": [
"standard",
"extended"
],
"type": "string",
"description": "`extended` (10000 credits) adds the chart wheel and a chapter for each of Sun to Pluto, Chiron and the Ascendant in its sign, from edited texts with no AI at request time. Available in the 20 languages of `/v1/natal-texts`."
},
"chart1": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"chart2": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"spread": {
"type": "string",
"maxLength": 64
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
},
"report_type": {
"enum": [
"natal",
"transit-yearly",
"synastry",
"business",
"career",
"love",
"money",
"child",
"lal-kitab",
"human-design",
"tarot",
"vedic-kundli"
],
"type": "string"
},
"allowReversed": {
"type": "boolean"
}
}
}
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
ayanamsaId
any
whitelabel
any
timezoneOffset
any
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.
Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
length
string
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"tone": {
"enum": [
"warm",
"professional",
"concise"
],
"type": "string"
},
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"depth": {
"enum": [
"standard",
"extended"
],
"type": "string",
"description": "`extended` (10000 credits) adds the chart wheel and a chapter for each of Sun to Pluto, Chiron and the Ascendant in its sign, from edited texts with no AI at request time. Available in the 20 languages of `/v1/natal-texts`."
},
"enrich": {
"type": "boolean"
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"length": {
"enum": [
"short",
"medium",
"long"
],
"type": "string"
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}
locations*
array
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
categories
array
whitelabel
any
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart",
"locations"
],
"properties": {
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"orbKm": {
"type": "number",
"maximum": 3000,
"minimum": 100
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"locations": {
"type": "array",
"items": {
"type": "object",
"required": [
"latitude",
"longitude"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
}
}
},
"maxItems": 5,
"minItems": 1
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"categories": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 19
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"style": {
"enum": [
"editorial",
"celestial",
"classic"
],
"type": "string"
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}
language
string
precision
integer
Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabel
any
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart1",
"chart2"
],
"properties": {
"chart1": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"chart2": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"year": {
"type": "integer",
"maximum": 2100,
"minimum": 1900
},
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}
Input schema (JSON)
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chart"
],
"properties": {
"chart": {
"allOf": [
{
"type": "object",
"required": [
"date",
"time",
"latitude",
"longitude"
],
"properties": {
"city": {
"type": "string",
"default": ""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"name": {
"type": "string",
"default": ""
},
"time": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"ayanamsa": {
"enum": [
"fagan-bradley",
"lahiri",
"de-luce",
"raman",
"krishnamurti",
"kp",
"yukteshwar",
"jn-bhasin",
"true-citra",
"djwhal-khul"
],
"type": "string",
"description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"timezone": {
"type": "string",
"description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known."
},
"cosmogram": {
"type": "boolean"
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ayanamsaId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"zodiacType": {
"enum": [
"tropical",
"sidereal"
],
"type": "string"
},
"houseSystem": {
"enum": [
"P",
"K",
"R",
"C",
"E",
"W",
"B",
"M",
"O",
"A",
"T",
"V",
"D",
"F",
"G",
"H",
"I",
"i",
"L",
"N",
"Q",
"S",
"U",
"X",
"Y"
],
"type": "string",
"default": "P"
},
"timezoneOffset": {
"anyOf": [
{
"type": "number",
"maximum": 14,
"minimum": -14
},
{
"type": "null"
}
],
"default": 0,
"description": "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. Ignored when timezone is sent."
}
},
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Birth latitude. Required here: the whole document is computed from it."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Birth longitude. Required here: the whole document is computed from it."
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
],
"description": "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; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
},
"fields": {
"type": "string",
"description": "Compact mode: comma-separated dotted paths to keep, relative to `data`, e.g. \"planets.name,planets.longitude,houses.cusp\". Omit for the whole response."
},
"language": {
"enum": [
"uk",
"en",
"de",
"ru",
"pl",
"es",
"pt",
"hi",
"fr",
"ko",
"it",
"ja",
"id",
"tr",
"nl",
"ro",
"cs",
"vi",
"ar",
"el",
"hu"
],
"type": "string"
},
"precision": {
"type": "integer",
"maximum": 15,
"minimum": 0,
"description": "Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn."
},
"whitelabel": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"logoUrl": {
"type": "string",
"format": "uri"
},
"companyBio": {
"type": "string",
"maxLength": 500
},
"companyUrl": {
"type": "string",
"format": "uri"
},
"footerText": {
"type": "string",
"maxLength": 200
},
"frontImage": {
"type": "string",
"format": "uri"
},
"reportName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"themeColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Accent colour, used for section heading text and inline emphasis."
},
"companyName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"fontPairing": {
"enum": [
"serif-sans",
"sans-serif",
"serif-only",
"sans-only",
"system"
],
"type": "string"
},
"companyEmail": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"headingColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
"description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor)."
},
"companyMobile": {
"type": "string",
"maxLength": 40
},
"backgroundColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textPrimaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
},
"textSecondaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$"
}
},
"additionalProperties": false
}
]
}
}
}