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

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"
  ]
}

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.

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
    },
    {
      "planet1": "Pluto",
      "planet2": "TrueNode",
      "aspect": "Sextile",
      "angle": 59.57,
      "orb": 0.43
    }
  ],
  "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 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.

API Pro endpoints

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. POST /v1/synastry takes personA and personB and returns the inter-chart aspects with orbs, the house overlays both ways and a score for each of six life spheres. POST /v1/solar-return takes birth, year and an optional location and returns the exact moment of the return with the full chart cast for it.

Limits and pricing

PlanPriceRequestsEndpoints
Free$010 a dayCharts, segments, daily horoscope, sky
API Pro$6.99 a month1,000 a dayEverything, including transits, synastry and solar returns

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.

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. 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°. Applying and separating are not labelled; the transits endpoint gives the exact date instead.

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

For self-reflection and entertainment. Not medical, legal or financial advice, and not guidance for gambling or betting.