Webhooks, streaming and the AI interpretation endpoints.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
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.
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.
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.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}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]
| 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. |
{
"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."
}
}
}AI interpretation of a single chart element (planet/house/aspect) in context. Useful for chart-detail pages. [Group: AI Interpretations] [Endpoint: POST /v1/interpret/element] [Cost: 100 credits (Tier 4)]
| Argument | Type | Description |
|---|---|---|
| body* | 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. |
| precision | integer | 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": [
"body"
],
"properties": {
"body": {
"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": {
"language": {
"enum": [
"uk",
"en",
"de",
"pl",
"es",
"pt",
"fr",
"it",
"nl",
"cs",
"ro",
"hu",
"el",
"tr",
"ar",
"hi",
"ja",
"ko",
"vi",
"id",
"ru"
],
"type": "string"
},
"disclaimer_inline": {
"type": "boolean",
"default": false
}
},
"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."
},
"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."
}
}
}Generate AI interpretation of a natal chart: personality traits, life themes, strongest archetypes. Multi-language. Token-cached for repeats. [Group: AI Interpretations] [Endpoint: POST /v1/interpret/natal] [Cost: 100 credits (Tier 4)]
| Argument | Type | Description |
|---|---|---|
| body* | 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. |
| precision | integer | 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": [
"body"
],
"properties": {
"body": {
"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": {
"language": {
"enum": [
"uk",
"en",
"de",
"pl",
"es",
"pt",
"fr",
"it",
"nl",
"cs",
"ro",
"hu",
"el",
"tr",
"ar",
"hi",
"ja",
"ko",
"vi",
"id",
"ru"
],
"type": "string"
},
"disclaimer_inline": {
"type": "boolean",
"default": false
}
},
"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."
},
"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."
}
}
}AI interpretation of a specific planet+sign+house combination: concise, focused on the placement only. [Group: AI Interpretations] [Endpoint: POST /v1/interpret/placement] [Cost: 100 credits (Tier 4)]
| Argument | Type | Description |
|---|---|---|
| body* | 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. |
| precision | integer | 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": [
"body"
],
"properties": {
"body": {
"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",
"required": [
"planet"
],
"properties": {
"planet": {
"type": "string",
"minLength": 1
},
"language": {
"enum": [
"uk",
"en",
"de",
"pl",
"es",
"pt",
"fr",
"it",
"nl",
"cs",
"ro",
"hu",
"el",
"tr",
"ar",
"hi",
"ja",
"ko",
"vi",
"id",
"ru"
],
"type": "string"
},
"disclaimer_inline": {
"type": "boolean",
"default": false
}
},
"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."
},
"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."
}
}
}AI interpretation of synastry between two charts: relationship dynamics, attractions, friction points, long-term outlook. [Group: AI Interpretations] [Endpoint: POST /v1/interpret/synastry] [Cost: 100 credits (Tier 4)]
| Argument | Type | Description |
|---|---|---|
| body* | any | Pair of natal charts for relationship calculations: synastry, composite, davison. |
| 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"body"
],
"properties": {
"body": {
"allOf": [
{
"type": "object",
"required": [
"chart1",
"chart2"
],
"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"
}
]
}
}
},
"description": "Pair of natal charts for relationship calculations: synastry, composite, davison."
},
{
"type": "object",
"properties": {
"language": {
"enum": [
"uk",
"en",
"de",
"pl",
"es",
"pt",
"fr",
"it",
"nl",
"cs",
"ro",
"hu",
"el",
"tr",
"ar",
"hi",
"ja",
"ko",
"vi",
"id",
"ru"
],
"type": "string"
},
"disclaimer_inline": {
"type": "boolean",
"default": false
}
}
}
],
"description": "Pair of natal charts for relationship calculations: synastry, composite, davison."
},
"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."
}
}
}AI reading of a tarot, Marseille or Lenormand spread: each position read in context, then a synthesis of the whole spread and one piece of advice. Takes card slugs or the drawn array of any draw response. Multi-language. [Group: AI Interpretations] [Endpoint: POST /v1/interpret/tarot] [Required: cards] [Cost: 100 credits (Tier 4)]
| Argument | Type | Description |
|---|---|---|
| art | string | Card art set for the images in the answer. GET /v1/tarot/decks lists them. |
| deck | string | |
| cards* | 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. |
| spread | string | |
| 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. |
AI interpretation of current/upcoming transits to a natal chart: what each major transit means in life context. [Group: AI Interpretations] [Endpoint: POST /v1/interpret/transits] [Cost: 100 credits (Tier 4)]
| Argument | Type | Description |
|---|---|---|
| body* | 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. |
| precision | integer | 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": [
"body"
],
"properties": {
"body": {
"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",
"required": [
"transitDate"
],
"properties": {
"language": {
"enum": [
"uk",
"en",
"de",
"pl",
"es",
"pt",
"fr",
"it",
"nl",
"cs",
"ro",
"hu",
"el",
"tr",
"ar",
"hi",
"ja",
"ko",
"vi",
"id",
"ru"
],
"type": "string"
},
"transitDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"transitTime": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}(:\\d{2})?$"
},
"transitTzOffset": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"disclaimer_inline": {
"type": "boolean",
"default": false
}
},
"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."
},
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| endpoints* | array | Endpoint paths to estimate, e.g. ["/chart", "/synastry", "/reports/natal"]. Leading slash optional. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"endpoints"
],
"properties": {
"endpoints": {
"type": "array",
"items": {
"type": "string"
},
"examples": [
[
"/chart"
],
[
"/chart",
"/synastry"
],
[
"/chart",
"/transits",
"/reports/natal"
]
],
"minItems": 1,
"description": "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)]
| 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 |
8 personas with specialties. [Group: MCP Advanced] [Endpoint: GET /v1/mcp/agent-pool-status] [Cost: 10 credits (Tier 1)]
| 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. |
{
"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."
}
}
}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)]
| 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 | |
Coach two charts on relationship dynamics. [Group: AI & MCP] [Endpoint: POST /v1/ai/comparison-coach] [Required: chart1, chart2, question] [Cost: 100 credits (Tier 4)]
| 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. |
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)]
| 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. |
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)]
| 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 |
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)]
| 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. |
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)]
| 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. |
{
"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."
}
}
}Keyword-tag scoring over chart chunks. [Group: MCP Advanced] [Endpoint: POST /v1/mcp/rag-search] [Required: query, chart] [Cost: 10 credits (Tier 1)]
| 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. |
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)]
| 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. |
SSE-stream of a tool call envelope. [Group: MCP Advanced] [Endpoint: POST /v1/mcp/tool-call-stream] [Required: tool] [Cost: 10 credits (Tier 1)]
| 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. |
{
"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."
}
}
}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]
| 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. |
{
"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."
}
}
}Countdown to next 5 eclipses. [Group: Real-time Streaming] [Endpoint: POST /v1/stream/eclipse-incoming] [Cost: 10 credits (Tier 1)]
| 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. |
{
"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."
}
}
}Next solar+lunar eclipses with totality info. [Group: Real-time Streaming] [Endpoint: POST /v1/stream/eclipse-totality] [Cost: 10 credits (Tier 1)]
| 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. |
| latitude | any | |
| longitude | any | |
| precision | integer | 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#",
"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."
},
"latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"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."
}
}
}Next planet sign-ingresses for N days. [Group: Real-time Streaming] [Endpoint: POST /v1/stream/ingress] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| days | 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. |
| precision | integer | 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#",
"properties": {
"days": {
"anyOf": [
{
"type": "number"
},
{
"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."
},
"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."
}
}
}Current 8-phase + countdown to next major phase. [Group: Real-time Streaming] [Endpoint: POST /v1/stream/lunar-phase] [Cost: 10 credits (Tier 1)]
| 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. |
{
"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."
}
}
}Current planetary hour + next 24. [Group: Real-time Streaming] [Endpoint: POST /v1/stream/planetary-hour-changes] [Required: latitude, longitude] [Cost: 10 credits (Tier 1)]
| 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. |
| latitude* | any | |
| longitude* | any | |
| precision | integer | Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn. |
| 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"latitude",
"longitude"
],
"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."
},
"latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"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."
},
"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."
}
}
}Current planetary positions snapshot, tickSeconds=30. [Group: Real-time Streaming] [Endpoint: POST /v1/stream/positions] [Cost: 10 credits (Tier 1)]
| 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. |
{
"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."
}
}
}All planets retro state + next stations. [Group: Real-time Streaming] [Endpoint: POST /v1/stream/retrograde-alerts] [Cost: 10 credits (Tier 1)]
| 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. |
{
"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."
}
}
}Today + tomorrow sun events. [Group: Real-time Streaming] [Endpoint: POST /v1/stream/sunrise-sunset] [Required: latitude, longitude] [Cost: 10 credits (Tier 1)]
| 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. |
| latitude* | any | |
| longitude* | any | |
| precision | integer | Compact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn. |
| 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"latitude",
"longitude"
],
"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."
},
"latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"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."
},
"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."
}
}
}Natal-transit hits within next N hours. [Group: Real-time Streaming] [Endpoint: POST /v1/stream/transit-alerts] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| body* | 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. |
| precision | integer | 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": [
"body"
],
"properties": {
"body": {
"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": {
"orb": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"hours": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"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."
},
"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."
}
}
}Current Moon VOC + next ingress. [Group: Real-time Streaming] [Endpoint: POST /v1/stream/void-of-course] [Cost: 10 credits (Tier 1)]
| 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. |
{
"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."
}
}
}Fires on Vedic Vimshottari dasha period transitions. [Group: Webhooks] [Endpoint: POST /v1/webhooks/dasha-change] [Required: url] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| url* | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"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."
}
}
}Subscribe to upcoming eclipse alerts (default 7 days before). [Group: Webhooks] [Endpoint: POST /v1/webhooks/eclipse-alert] [Required: url] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| url* | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"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."
}
}
}Fetch a single webhook subscription owned by the authenticated user. [Group: Webhooks] [Endpoint: GET /v1/webhooks/{id}] [Required: id] [Cost: see your plan — endpoint not in the public credit manifest]
| Argument | Type | Description |
|---|---|---|
| id* | integer | Webhook id, as returned by `GET /v1/webhooks`. |
| 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Webhook id, as returned by `GET /v1/webhooks`."
},
"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."
}
}
}Fire a synthetic delivery to the registered URL with `{ "test": true }` payload. Useful when validating endpoint signature handling. Records the result in failure_count / last_status_code. [Group: Webhooks] [Endpoint: POST /v1/webhooks/{id}/test] [Required: id] [Cost: see your plan — endpoint not in the public credit manifest]
| Argument | Type | Description |
|---|---|---|
| id* | integer | Webhook id, as returned by `GET /v1/webhooks`. |
| 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Webhook id, as returned by `GET /v1/webhooks`."
},
"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."
}
}
}Fires N days before a Vimshottari mahadasha ends. [Group: Webhooks] [Endpoint: POST /v1/webhooks/mahadasha-end] [Required: url] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| url* | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"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."
}
}
}Fires at every planetary hour boundary (24/day). [Group: Webhooks] [Endpoint: POST /v1/webhooks/planetary-hour-tick] [Required: url] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| url* | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"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."
}
}
}Fires when any of Mercury–Pluto stations direct. [Group: Webhooks] [Endpoint: POST /v1/webhooks/retrograde-end] [Required: url] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| url* | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"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."
}
}
}Fires when any of Mercury–Pluto stations retrograde. [Group: Webhooks] [Endpoint: POST /v1/webhooks/retrograde-start] [Required: url] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| url* | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"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."
}
}
}Fires N days before a solar/lunar/planetary return is exact. [Group: Webhooks] [Endpoint: POST /v1/webhooks/return-due] [Required: url] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| url* | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"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."
}
}
}Fires when any tracked planet ingresses a new sign. [Group: Webhooks] [Endpoint: POST /v1/webhooks/sign-ingress] [Required: url] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| url* | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"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."
}
}
}Subscribe to outbound webhook deliveries. Events: report-ready, transit-alert, eclipse-alert. Returns a signing_secret used to verify the X-AstroWay-Signature HMAC-SHA256 header on each delivery. [Group: Webhooks] [Endpoint: POST /v1/webhooks/subscribe] [Required: event, url] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| url* | string | |
| event* | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event",
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"event": {
"enum": [
"report-ready",
"transit-alert",
"eclipse-alert",
"transit-trigger",
"retrograde-start",
"retrograde-end",
"return-due",
"dasha-change",
"mahadasha-end",
"void-of-course-start",
"planetary-hour-tick",
"sign-ingress"
],
"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."
},
"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."
}
}
}Subscribe to natal-transit aspect threshold-crossings. [Group: Webhooks] [Endpoint: POST /v1/webhooks/transit-trigger] [Required: url] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| url* | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"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."
}
}
}Fires at the start of every VOC Moon period. [Group: Webhooks] [Endpoint: POST /v1/webhooks/void-of-course-start] [Required: url] [Cost: 10 credits (Tier 1)]
| Argument | Type | Description |
|---|---|---|
| url* | 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. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"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."
}
}
}List all active webhook subscriptions for the authenticated user. [Group: Webhooks] [Endpoint: GET /v1/webhooks] [Cost: 10 credits (Tier 1)]
| 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. |
{
"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."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"cards"
],
"properties": {
"art": {
"type": "string",
"maxLength": 40,
"description": "Card art set for the images in the answer. GET /v1/tarot/decks lists them."
},
"deck": {
"enum": [
"rider-waite",
"marseille",
"lenormand"
],
"type": "string",
"default": "rider-waite"
},
"cards": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 80,
"minLength": 1
},
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"reversed": {
"type": "boolean"
}
}
},
{
"type": "object",
"required": [
"card"
],
"properties": {
"card": {
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 80,
"minLength": 1
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"reversed": {
"type": "boolean"
}
},
"additionalProperties": {
"anyOf": [
{},
{
"type": "null"
}
]
}
}
]
},
"maxItems": 36,
"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."
},
"spread": {
"type": "string",
"maxLength": 60
},
"language": {
"enum": [
"uk",
"en",
"de",
"pl",
"es",
"pt",
"fr",
"it",
"nl",
"cs",
"ro",
"hu",
"el",
"tr",
"ar",
"hi",
"ja",
"ko",
"vi",
"id",
"ru"
],
"type": "string"
},
"question": {
"type": "string",
"maxLength": 500
},
"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. |
{
"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. |
{
"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. |
{
"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 |
{
"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 |
{
"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
}
}
}{
"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."
}
}
}