Developers

Natal Chart API

Astrology calculations as JSON, computed with the Swiss Ephemeris: the same engine that draws every chart in NatalChart.AI, without the interpretation layer. No AI calls, so the same input always returns the same numbers.

✦ Swiss Ephemeris✦ 10 requests a day free✦ Request bodies never stored

Updated · Next review

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"
  }
}
FieldRequiredMeaning
dateyesBirth date, YYYY-MM-DD, from 1800 to 2399.
timenoLocal time, HH:mm, 24-hour. null when unknown.
latitude, longitudeyesDecimal degrees, north and east positive.
timezonenoIANA zone. Left out, it is resolved from the coordinates with the daylight-saving rules of that date.

Endpoints

EndpointPlanReturns
POST /v1/chart/shortFreeThe short chart: Sun, Moon and Ascendant with degrees, every body's sign, retrograde bodies, dominant element and quality.
POST /v1/chart/fullFreeThe 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/planetsFreeBodies only: longitude, sign, degree within the sign, daily speed, retrograde flag, house.
POST /v1/chart/anglesFreeAscendant, Midheaven, Vertex and Part of Fortune.
POST /v1/chart/housesFreeThe twelve Placidus house cusps.
POST /v1/chart/aspectsFreeThe five major aspects between the bodies, each with its angle and orb, and the orb table used.
POST /v1/chart/elementsFreeElement and quality balance, with the dominant of each.
POST /v1/chart/fixed-starsFreeFixed-star conjunctions to the natal bodies within 1.5 degrees.
POST /v1/horoscope/dailyFreeThe 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/skyFreePlanetary positions, Moon phase and the coming week's sky events for a date (?date=YYYY-MM-DD, today by default).
GET /v1/usageFreeYour plan, today's count and when the pool refills. Costs nothing.
POST /v1/transitsAPI ProEvery transit event in a window of up to 92 days: exact transit-to-natal aspects by date, sign ingresses and stations.
POST /v1/synastryAPI ProTwo charts compared: inter-chart aspects with orbs, house overlays both ways and a score per life sphere.
POST /v1/solar-returnAPI ProThe solar return chart for a year, cast for the birth place or another location.
POST /v1/timingAPI ProEvery 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/scoreAPI ProOne 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/rankAPI ProThe 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

PlanPriceRequestsEndpoints
Free$010 a dayCharts, segments, daily horoscope, sky
API Pro$6.99 a month1,000 a dayEverything: 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" } }.

StatusCodeWhen
400invalid_requestThe body is not valid. details lists every problem. Not counted.
401missing_api_key, invalid_api_keyNo key, an unknown key or a revoked one.
403plan_requiredAn API Pro endpoint called on the Free plan.
429daily_limit_reachedThe day’s pool is spent. It refills at 00:00 UTC.
500internal_errorA 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.

Ready to see your real chart?

Generate my free chart