Base URL: https://api.natalchart.ai. Every request carries an API key, every response is JSON, and every longitude is given to four decimals of a degree before it is turned into a sign. The key is free: sign in with a NatalChart.AI account and create one.
Quick start
curl https://api.natalchart.ai/v1/chart/short \
-H "Authorization: Bearer $NATALCHART_API_KEY" \
-H "Content-Type: application/json" \
-d '{"birth":{"date":"1991-09-06","time":"18:30","latitude":50.4501,"longitude":30.5234}}'The response, for the demonstration birth used across this site (1991-09-06, 18:30, Kyiv). Five of the bodies are shown:
{
"sun": {
"sign": "Virgo",
"degreeInSign": 13.55,
"house": 7
},
"moon": {
"sign": "Leo",
"degreeInSign": 19.02,
"house": 7
},
"ascendant": {
"sign": "Aquarius",
"degreeInSign": 14.9898
},
"signs": {
"Sun": "Virgo",
"Moon": "Leo",
"Mercury": "Leo",
"Venus": "Leo",
"Mars": "Libra"
},
"retrograde": [
"Venus",
"Saturn",
"Uranus",
"Neptune",
"TrueNode",
"Lilith",
"Juno"
]
}MCP server for AI assistants
The same calculations are an MCP server at https://www.natalchart.ai/mcp, for Claude, ChatGPT, Cursor and VS Code. It takes the same key and spends the same daily pool, one request per tool call. Setup for each client: astrology MCP server.
Authentication
Send the key as Authorization: Bearer nc_live_... (an X-API-Key header works too). The full key is shown once, when you create it; we keep only its hash. An account holds up to five active keys and can revoke any of them at once. Keep keys on a server: a key shipped in browser or app code can be read by anyone.
Birth data
Endpoints that compute a chart take one object:
{
"birth": {
"date": "1991-09-06",
"time": "18:30",
"latitude": 50.4501,
"longitude": 30.5234,
"timezone": "Europe/Kyiv"
}
}| Field | Required | Meaning |
|---|---|---|
date | yes | Birth date, YYYY-MM-DD, from 1800 to 2399. |
time | no | Local time, HH:mm, 24-hour. null when unknown. |
latitude, longitude | yes | Decimal degrees, north and east positive. |
timezone | no | IANA zone. Left out, it is resolved from the coordinates with the daylight-saving rules of that date. |
Endpoints
| Endpoint | Plan | Returns |
|---|---|---|
POST /v1/chart/short | Free | The short chart: Sun, Moon and Ascendant with degrees, every body's sign, retrograde bodies, dominant element and quality. |
POST /v1/chart/full | Free | The full chart: every body with longitude, sign, degree, speed, retrograde flag and house; the angles; twelve Placidus cusps; the aspects with orbs; element and quality balance; fixed-star contacts. |
POST /v1/chart/planets | Free | Bodies only: longitude, sign, degree within the sign, daily speed, retrograde flag, house. |
POST /v1/chart/angles | Free | Ascendant, Midheaven, Vertex and Part of Fortune. |
POST /v1/chart/houses | Free | The twelve Placidus house cusps. |
POST /v1/chart/aspects | Free | The five major aspects between the bodies, each with its angle and orb, and the orb table used. |
POST /v1/chart/elements | Free | Element and quality balance, with the dominant of each. |
POST /v1/chart/fixed-stars | Free | Fixed-star conjunctions to the natal bodies within 1.5 degrees. |
POST /v1/horoscope/daily | Free | The calculated day: the sky at noon UTC, the Moon's phase, the sky events of the coming week and, with birth data, every transit to the natal chart with its orb. No generated text. |
GET /v1/sky | Free | Planetary positions, Moon phase and the coming week's sky events for a date (?date=YYYY-MM-DD, today by default). |
GET /v1/usage | Free | Your plan, today's count and when the pool refills. Costs nothing. |
POST /v1/transits | API Pro | Every transit event in a window of up to 92 days: exact transit-to-natal aspects by date, sign ingresses and stations. |
POST /v1/synastry | API Pro | Two charts compared: inter-chart aspects with orbs, house overlays both ways and a score per life sphere. |
POST /v1/solar-return | API Pro | The solar return chart for a year, cast for the birth place or another location. |
POST /v1/timing | API Pro | Every day of a window of up to 62 days scored for one activity (general, business, romance, health, creative, travel, home, clarity): helping and hindering transits, Moon phase and sign, void of course. The five best days first. |
POST /v1/locations/score | API Pro | One place against one chart: the relocated angles, the planets on them with orbs, a score for each life sphere and an overall score. |
POST /v1/locations/rank | API Pro | The catalogue of major cities ranked for one chart, overall or by chosen life spheres, worldwide or in one region. |
The full chart
POST /v1/chart/full returns the whole calculation in the shape of the published demonstration file, so you can check a response against a fixed chart before you write any code. Shortened here to two bodies, two cusps and the two tightest aspects:
{
"input": {
"date": "1991-09-06",
"time": "18:30",
"latitude": 50.4501,
"longitude": 30.5234,
"timeKnown": true
},
"time": {
"timezone": "Europe/Kyiv",
"offsetHours": 3,
"julianDayUT": 2448506.1458333335
},
"planets": [
{
"name": "Sun",
"longitude": 163.5457,
"sign": "Virgo",
"degreeInSign": 13.55,
"speed": 0.9704,
"retrograde": false,
"house": 7
},
{
"name": "Moon",
"longitude": 139.0225,
"sign": "Leo",
"degreeInSign": 19.02,
"speed": 14.5955,
"retrograde": false,
"house": 7
}
],
"angles": {
"ascendant": {
"longitude": 314.9898,
"sign": "Aquarius"
},
"midheaven": {
"longitude": 249.8956,
"sign": "Sagittarius"
}
},
"houses": [
{
"number": 1,
"cusp": 314.9898,
"sign": "Aquarius"
},
{
"number": 2,
"cusp": 13.7492,
"sign": "Aries"
}
],
"aspects": [
{
"planet1": "Pallas",
"planet2": "Juno",
"aspect": "Square",
"angle": 89.79,
"orb": 0.21,
"phase": "separating"
},
{
"planet1": "Pluto",
"planet2": "TrueNode",
"aspect": "Sextile",
"angle": 59.57,
"orb": 0.43,
"phase": "separating"
}
],
"elements": {
"Fire": 7,
"Earth": 6,
"Air": 4,
"Water": 2
},
"qualities": {
"Cardinal": 6,
"Fixed": 11,
"Mutable": 2
}
}The segment endpoints (planets, angles, houses, aspects, elements, fixed-stars) return one part of the same object each, for callers that need only that part.
The daily horoscope
POST /v1/horoscope/daily is the calculated half of a daily horoscope: the sky at noon UTC, the Moon’s phase and sign, the sky events of the coming week and, when you send birth, every transit to that chart with its aspect, its orb, whether it is applying or separating, the moment it is or was exact, and the natal house the transiting body is in. Transit orbs are 2° for the Moon, Sun, Mercury, Venus and Mars and 3° for the slower bodies. Two fields are fixed rules rather than astronomy, and the response states them: tone (trine and sextile supportive, square and opposition challenging, conjunction intensifying) and focus, the three contacts that rank highest by planet speed and tightness. There is no written text; that part is yours.
A real response for the demonstration chart on 2026-09-18, with the lists cut to two items:
{
"date": "2026-09-18",
"computedFor": "2026-09-18T12:00:00.000Z",
"moon": {
"phase": "First Quarter",
"illumination": 46.5,
"elongation": 86.04,
"sign": "Sagittarius",
"longitude": 261.6344,
"degreeInSign": 21.63,
"theme": "Decision + Action",
"nextNewMoon": {
"utc": "2026-10-10T15:50:05.436Z",
"sign": "Libra",
"degreeInSign": 17.36,
"absoluteDegree": 197.36
},
"nextFullMoon": {
"utc": "2026-09-26T16:49:02.781Z",
"sign": "Aries",
"degreeInSign": 3.62,
"absoluteDegree": 3.62
}
},
"positions": [
{
"name": "Sun",
"longitude": 175.5994,
"sign": "Virgo",
"degreeInSign": 25.6,
"speed": 0.9761,
"retrograde": false
},
{
"name": "Moon",
"longitude": 261.6344,
"sign": "Sagittarius",
"degreeInSign": 21.63,
"speed": 11.8869,
"retrograde": false
}
],
"events": [
{
"kind": "ingress",
"at": "2026-09-23T00:05:13.524Z",
"planet": "sun",
"sign": "Libra",
"degreeInSign": 0.01
},
{
"kind": "equinox",
"at": "2026-09-23T00:05:13.524Z",
"planet": "sun",
"sign": "Libra",
"degreeInSign": 0.01
}
],
"transits": [
{
"transit": "Vesta",
"natal": "Mercury",
"aspect": "Trine",
"angle": 119.93,
"orb": 0.07,
"phase": "applying",
"exactAt": "2026-09-18T21:43:39.997Z",
"tone": "supportive",
"transitHouse": 2,
"houseTheme": "Money & Possessions"
},
{
"transit": "Uranus",
"natal": "Lilith",
"aspect": "Trine",
"angle": 119.86,
"orb": 0.14,
"phase": "separating",
"exactAt": null,
"tone": "supportive",
"transitHouse": 3,
"houseTheme": "Communication & Learning"
}
],
"focus": [
{
"transit": "Pluto",
"natal": "Mars",
"aspect": "Trine",
"angle": 119.78,
"orb": 0.22,
"phase": "separating",
"exactAt": "2026-09-03T17:58:04.996Z",
"tone": "supportive",
"transitHouse": 12,
"houseTheme": "Spirituality & Subconscious"
},
{
"transit": "Neptune",
"natal": "Mars",
"aspect": "Opposition",
"angle": 179.74,
"orb": 0.26,
"phase": "separating",
"exactAt": "2026-09-09T00:24:29.005Z",
"tone": "challenging",
"transitHouse": 1,
"houseTheme": "Identity & Self"
},
{
"transit": "Jupiter",
"natal": "Moon",
"aspect": "Conjunction",
"angle": 1.77,
"orb": 1.77,
"phase": "applying",
"exactAt": "2026-09-27T20:40:07.004Z",
"tone": "intensifying",
"transitHouse": 7,
"houseTheme": "Partnerships & Marriage"
}
]
}API Pro endpoints
Six endpoints, which together are everything the app computes. Each example below is a real response for the demonstration chart, shortened; "..." in a request stands for the birth object shown above.
Transits for a period
POST /v1/transits takes birth, from and to (at most 92 days) and returns every exact transit-to-natal aspect by date, every sign ingress and every station in the window, plus the contacts active on the first day with their phase and exact moment.
{
"window": {
"from": "2026-09-18",
"to": "2026-10-18"
},
"events": [
{
"kind": "aspect",
"date": "2026-09-19",
"body": "Mercury",
"target": "Neptune",
"aspect": "Square",
"exactness": 0,
"significance": "low"
},
{
"kind": "aspect",
"date": "2026-09-22",
"body": "Jupiter",
"target": "Pluto",
"aspect": "Square",
"exactness": 0,
"significance": "low"
},
{
"kind": "aspect",
"date": "2026-09-23",
"body": "Sun",
"target": "Saturn",
"aspect": "Trine",
"exactness": 0,
"significance": "low"
},
{
"kind": "aspect",
"date": "2026-09-26",
"body": "Sun",
"target": "Mars",
"aspect": "Conjunction",
"exactness": 0,
"significance": "low"
}
]
}Synastry
POST /v1/synastry takes personA and personB and returns the inter-chart aspects with orbs, where each person’s planets fall in the other’s houses, and a score for each of six life spheres. The second person here is synthetic too (1989-03-14, 07:45, New York).
{
"aspects": [
{
"personA": "Neptune",
"personB": "Lilith",
"aspect": "Trine",
"angle": 120.08,
"orb": 0.08
},
{
"personA": "Saturn",
"personB": "Jupiter",
"aspect": "Trine",
"angle": 119.66,
"orb": 0.34
},
{
"personA": "Mercury",
"personB": "Moon",
"aspect": "Sextile",
"angle": 60.38,
"orb": 0.38
}
],
"sphereScores": {
"identity": 89,
"love": 81,
"body": 86,
"money": 76,
"home": 83,
"mind": 66
}
}Solar return
POST /v1/solar-return takes birth, year and an optional location and returns the exact moment the Sun returns to its natal longitude, with the full chart cast for it. It needs a birth time: without one the natal Sun is uncertain by half a degree, which moves the return by about twelve hours.
{
"year": 2027,
"exactMomentUtc": "2027-09-06T08:29:55Z",
"location": {
"latitude": 50.4501,
"longitude": 30.5234
},
"chart": "the full chart of that moment, in the shape of /v1/chart/full"
}Best days for an activity
POST /v1/timing takes birth, an activity (general, business, romance, health, creative, travel, home or clarity), from and to (at most 62 days) and an optional timezone that sets where each day begins. Every day is scored from 0 to 100 from the exact transit geometry, weighted by the planets that matter for the activity, and the five best days come first. It describes the sky; it does not promise a day.
{
"activity": "business",
"best": [
{
"date": "2026-10-12",
"score": 69.5,
"rating": "good",
"moonPhase": "New Moon",
"moonSign": "Scorpio",
"voidOfCourse": false,
"favorableAspects": [
"Transit Sun Sextile Moon (0.2°)",
"Transit Mercury Sextile Sun (0.3°)",
"Transit Mercury Sextile Neptune (0.2°)"
],
"challengingAspects": [
"Transit Saturn Square Uranus (0.8°)"
]
},
{
"date": "2026-10-14",
"score": 63.5,
"rating": "good",
"moonPhase": "Waxing Crescent",
"moonSign": "Sagittarius",
"voidOfCourse": false,
"favorableAspects": [
"Transit Sun Sextile Venus (1.1°)",
"Transit Moon Sextile Saturn (0.7°)",
"Transit Jupiter Conjunction Venus (0.1°)"
],
"challengingAspects": [
"Transit Saturn Square Uranus (0.7°)",
"Transit Saturn Square Uranus (0.6°)"
]
}
]
}A place against a chart
POST /v1/locations/score takes birth and a location with coordinates. The chart is relocated there, and the response gives the relocated angles, the planets on them with their orbs, a score from 0 to 10 for each life sphere (5 is neutral) and how strongly the chart reacts to the place at all: strong when a major planet sits within 2° of an angle, moderate within 4°, faint otherwise.
{
"relocated": {
"ascendant": {
"longitude": 277.7847,
"sign": "Capricorn"
},
"midheaven": {
"longitude": 210.708,
"sign": "Scorpio"
}
},
"angularPlanets": [
{
"planet": "Uranus",
"angle": "ASC",
"orb": 2.12,
"weight": "major",
"strength": "strong"
},
{
"planet": "Neptune",
"angle": "ASC",
"orb": 6.31,
"weight": "major",
"strength": "weak"
}
],
"spheres": {
"identity": {
"score10": 1,
"verdict": "challenging"
},
"love": {
"score10": 6.1,
"verdict": "slightly supportive"
},
"body": {
"score10": 3.2,
"verdict": "challenging"
},
"money": {
"score10": 2.2,
"verdict": "challenging"
},
"home": {
"score10": 1.7,
"verdict": "challenging"
},
"mind": {
"score10": 4.9,
"verdict": "neutral"
}
},
"overall10": 2.2,
"strength": "moderate"
}The best cities for a chart
POST /v1/locations/rank takes birth, an optional focus (any of identity, love, body, money, home, mind), an optional region and a limit from 3 to 12, and ranks a catalogue of 61 major cities. Not every city on Earth is compared; any other place can be scored with the endpoint above.
{
"comparedCities": 61,
"top": [
{
"city": "New York",
"country": "United States",
"overall10": 7.4,
"focus10": 8.3,
"strength": "strong",
"contacts": [
"Venus MC 0.6°",
"Moon MC 2.3°"
]
},
{
"city": "Tbilisi",
"country": "Georgia",
"overall10": 7.4,
"focus10": 8.2,
"strength": "moderate",
"contacts": [
"Sun DSC 3.3°"
]
},
{
"city": "Montreal",
"country": "Canada",
"overall10": 7.4,
"focus10": 8.1,
"strength": "strong",
"contacts": [
"Venus MC 0.1°",
"Moon MC 2.8°",
"Mercury MC 3.8°"
]
}
]
}Limits and pricing
| Plan | Price | Requests | Endpoints |
|---|---|---|---|
| Free | $0 | 10 a day | Charts, segments, daily horoscope, sky |
| API Pro | $6.99 a month | 1,000 a day | Everything: transits, synastry, solar returns, best days, locations |
Requests are counted per account, across all of its keys, and the pool refills at 00:00 UTC. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. A request rejected as invalid is not counted, a calculation that fails on our side is given back, and GET /v1/usage is always free. API Pro is a separate subscription from the app plans: it does not include app Premium, and app Premium does not include it. The two pools are separate as well: the app counts AI answers by the week, this API counts calculations by the UTC day, and neither spends the other.
Errors
Every error has one shape: { "error": { "code", "message", "details"?, "docs" } }.
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | The body is not valid. details lists every problem. Not counted. |
| 401 | missing_api_key, invalid_api_key | No key, an unknown key or a revoked one. |
| 403 | plan_required | An API Pro endpoint called on the Free plan. |
| 429 | daily_limit_reached | The day’s pool is spent. It refills at 00:00 UTC. |
| 500 | internal_error | A failure on our side. The request is not counted. |
Calculation settings
These are fixed, and they are the settings of the app itself, described in full on the verification page and checked against NASA’s JPL Horizons in the accuracy report. Swiss Ephemeris data files with the speed flag on. Tropical zodiac, geocentric, apparent positions. Placidus houses. True lunar node. Lilith as the osculating lunar apogee. Part of Fortune as ASC + Moon − Sun for day and night charts alike. The five major aspects only: conjunction 8°, sextile 6°, square 8°, trine 8°, opposition 8°. Every natal and transit aspect says whether it is applying or separating, judged from the speeds of both bodies, retrograde included.
Privacy
Birth data is personal data. The API reads it, computes, answers and forgets it: no request body is stored, and nothing you send is used for anything but the response. What we keep per request is the endpoint, the status code and the latency. See the privacy policy.
Questions
Does the API use AI?
No. Every endpoint is a calculation: planetary positions from the Swiss Ephemeris, house cusps, aspects, transits. No text is generated and no language model is called, which is why the same input always returns the same numbers.
Can I choose the house system or a sidereal zodiac?
No. Every chart is tropical with Placidus houses, the same settings the NatalChart.AI app uses. If you need Whole Sign, Koch or a sidereal zodiac, this is not the right API for that.
What happens when the birth time is unknown?
Send time as null. The chart is computed for 12:00 local time, and everything that depends on the time is withheld rather than guessed: the angles and the house cusps come back as null, bodies carry no house, and a warning says how far the Moon can be off.
Do you geocode place names?
No. Send latitude and longitude. The time zone is resolved from the coordinates, with the historical daylight-saving rules for that date, unless you pass an IANA time zone yourself.
Do you store the birth data I send?
No. Request bodies are never written anywhere. The request log keeps the endpoint, the status code and the latency, which is what the usage counter needs.
What counts as a request?
One successful call to a calculation endpoint. A request rejected as invalid costs nothing, a failure on our side is given back, and /v1/usage is free. The pool is per account, not per key, and refills at 00:00 UTC: 10 a day on Free, 1,000 a day on API Pro.
Can I use it in a commercial product?
Yes, on either plan. Keep your key on a server: a key in browser or app code can be copied by anyone who opens it.