FreeAstroAPI LogoFreeAstroAPI
Global Relocation & Location Intelligence

Astrocartography APILines, Relocation & City Ranking

Build destination search, relocation scoring, and world-map astrology products with dense WGS84 GeoJSON lines, curved geodesic-style ASC and DSC paths, MC and IC meridian geometry, paran crossings, and relocated chart summaries.

Built for map products and relocation workflows

The astrocartography surface is split into clear building blocks so teams can render maps, rank cities, score one destination, or generate relocated chart summaries without stitching together multiple custom pipelines.

Map-Ready Lines

Return dense WGS84 GeoJSON so frontend teams can draw MC, IC, ASC, and DSC overlays directly on 2D maps with no path rebuilding step.

Paran Hotspots

Surface paran combinations with focus-aware metadata and GeoJSON band geometry for advanced astrocartography explorers and hotspot UI.

City Scoring

Score one known destination across five public focus areas and explain where the score came from.

Ranked Destinations

Search and rank cities for career, romance, home, health, or spiritual focus without building your own ranking engine.

Start with one chart, then draw everything

The lines endpoint is the fastest starting point for map products. It returns dense WGS84 GeoJSON geometry that can be rendered directly, including curved ASC and DSC paths, vertical MC and IC tracks, and GeoJSON point crossings when requested.

One geometry contract for every line

MC, IC, ASC, and DSC all arrive as GeoJSON, so one renderer can draw the full chart.

Curved geodesic-style paths included

ASC and DSC are shipped as ready-to-draw coordinate sequences instead of reconstruction hints.

Crossings stay map-native

When enabled, crossings are returned as GeoJSON points that drop directly into your map layers.

POST /api/v1/western/astrocartography/lines
{
  "meta": {
    "geometry_format": "geojson",
    "coordinate_reference_system": "WGS84",
    "coordinate_order": "longitude_latitude",
    "line_sample_step_degrees": 0.25,
    "crossing_count": 2
  },
  "lines": [
    {
      "id": "sun:asc",
      "body": "sun",
      "angle": "asc",
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [-159.2, -68.0],
          [-124.8, -48.0],
          [-101.5, -32.0],
          [-72.6, 0.0],
          [-43.4, 32.0],
          [15.4, 68.0]
        ]
      }
    },
    {
      "id": "venus:asc",
      "body": "venus",
      "angle": "asc",
      "geometry": {
        "type": "MultiLineString",
        "coordinates": [
          [[121.4, -62.0], [171.5, -20.0]],
          [[-178.4, -8.0], [-123.4, 54.0]]
        ]
      }
    }
  ],
  "crossings": [
    {
      "id": "sun:mc|moon:dsc",
      "geometry": {
        "type": "Point",
        "coordinates": [-22.7, 0.0]
      }
    }
  ],
  "notes": {
    "rendering": "The payload is already dense enough for direct MapLibre or Mapbox drawing."
  }
}
Classic Chart View

Render astrocartography as a chart, not a slippy map

This mode uses a rectangular chart renderer with a fixed world frame, graticule, frame labels, and direct line plotting. It is designed to feel closer to classic astrocartography software while still drawing the same API geometry.

Classic Chart Demo

Rectangular chart view drawn from the astrocartography lines payload.

ASCDSCMCIC
150W120W90W60W30W030E60E90E120E150E60S60S30S30SEqEq30N30N60N60NArctic CircleAntarctic CirclesICgICdMCjICsMCgMCdICjMCsACsDCgACgDCdACdDCjDCjAC

Chart-first Rendering

This view uses a fixed rectangular world chart instead of a slippy map. That gets much closer to classic astrocartography software because the geometry is rendered as a chart, not as an interactive map tile overlay. When the API returns `chart_families`, the renderer uses them as uninterrupted AC/DC guide curves underneath the exact branch lines.

Projection: plate carrée / equirectangular

Geometry: geojson, WGS84

Ranked City Example

Show the recommended city and the lines that justify it

A useful recommendations contract does more than rank cities. It also returns the destination coordinates, a city-scoped explanation block, and the exact line ids the renderer should draw for that city.

Recommendation Map Example

A ranked city list, its coordinates, and the exact lines referenced by the selected city’s map_line_ids.

mercury MCneptune MCsun MCmars DSCtrue_node MCvenus ASCpluto MC
pluto MCmercury MCneptune MCsun MCtrue_node MC12345Amiens, FR49.9000, 2.3000

How the client uses the payload

Read the ranked city coordinates from the recommendations response, then resolve the selected city’s map_line_ids against map.lines to draw only the relevant overlays.

Why Amiens ranked highly

Mercury MC is the strongest supportive line for this career search, with 3 nearby contributing line(s). The frontend switches the visible map overlays directly from that city’s map_line_ids instead of guessing which global lines matter.

Top Recommended Cities

Career Focus

Example Recommendations Response

This example shows a real ranked city list and lets the viewer switch the active city from the same `results` array. The frontend uses the selected city’s `map_line_ids` to resolve the visible lines without reconstructing geometry.

{
  "results": [
    {
      "city": {
        "name": "Amiens",
        "country": "FR",
        "state": "Hauts-de-France",
        "lat": 49.9,
        "lng": 2.3,
        "timezone": "Europe/Paris",
        "population": 143086
      },
      "city_visual_explanation": {
        "explanation_mode": "line_plus_paran",
        "map_line_ids": [
          "mercury:mc",
          "neptune:mc",
          "sun:mc",
          "mars:dsc",
          "true_node:mc",
          "venus:asc",
          "pluto:mc"
        ],
        "primary_lines": [
          {
            "body": "mercury",
            "angle": "mc",
            "distance_km": 9,
            "line_id": "mercury:mc",
            "is_close": true,
            "visual_strength": "high",
            "source_focuses": [
              "career"
            ]
          },
          {
            "body": "neptune",
            "angle": "mc",
            "distance_km": 116.8,
            "line_id": "neptune:mc",
            "is_close": true,
            "visual_strength": "high",
            "source_focuses": [
              "career"
            ]
          }
        ],
        "primary_parans": [
          {
            "id": "mars:dsc:true_node:mc:49.281",
            "body_a": "mars",
            "event_a": "dsc",
            "body_b": "true_node",
            "event_b": "mc",
            "distance_km": 68.9,
            "is_close": true,
            "visual_strength": "high",
            "source_focuses": [
              "career"
            ]
          }
        ]
      },
      "match_tier": "strong",
      "rank": 1,
      "score": 120.62,
      "signal_strength": "strong",
      "summary": "Mercury MC is the strongest supportive line for this career search, with 3 nearby contributing line(s)."
    },
    {
      "city": {
        "name": "Albert",
        "country": "FR",
        "state": "Hauts-de-France",
        "lat": 50.00091,
        "lng": 2.65096,
        "timezone": "Europe/Paris",
        "population": 10588
      },
      "city_visual_explanation": {
        "explanation_mode": "line_plus_paran",
        "map_line_ids": [
          "mercury:mc",
          "neptune:mc",
          "sun:mc",
          "mars:dsc",
          "true_node:mc",
          "venus:asc",
          "pluto:mc"
        ],
        "primary_lines": [
          {
            "body": "mercury",
            "angle": "mc",
            "distance_km": 16.1,
            "line_id": "mercury:mc",
            "is_close": true,
            "visual_strength": "high",
            "source_focuses": [
              "career"
            ]
          },
          {
            "body": "neptune",
            "angle": "mc",
            "distance_km": 91.5,
            "line_id": "neptune:mc",
            "is_close": true,
            "visual_strength": "high",
            "source_focuses": [
              "career"
            ]
          }
        ],
        "primary_parans": [
          {
            "id": "mars:dsc:true_node:mc:49.281",
            "body_a": "mars",
            "event_a": "dsc",
            "body_b": "true_node",
            "event_b": "mc",
            "distance_km": 80.1,
            "is_close": false,
            "visual_strength": "medium",
            "source_focuses": [
              "career"
            ]
          }
        ]
      },
      "match_tier": "strong",
      "rank": 2,
      "score": 120.47,
      "signal_strength": "strong",
      "summary": "Mercury MC is the strongest supportive line for this career search, with 3 nearby contributing line(s)."
    },
    {
      "city": {
        "name": "Isbergues",
        "country": "FR",
        "state": "Hauts-de-France",
        "lat": 50.62328,
        "lng": 2.45902,
        "timezone": "Europe/Paris",
        "population": 10067
      },
      "city_visual_explanation": {
        "explanation_mode": "line_plus_paran",
        "map_line_ids": [
          "mercury:mc",
          "neptune:mc",
          "sun:mc",
          "mars:dsc",
          "true_node:mc",
          "venus:asc",
          "pluto:mc"
        ],
        "primary_lines": [
          {
            "body": "mercury",
            "angle": "mc",
            "distance_km": 2.4,
            "line_id": "mercury:mc",
            "is_close": true,
            "visual_strength": "high",
            "source_focuses": [
              "career"
            ]
          },
          {
            "body": "neptune",
            "angle": "mc",
            "distance_km": 103.8,
            "line_id": "neptune:mc",
            "is_close": true,
            "visual_strength": "high",
            "source_focuses": [
              "career"
            ]
          }
        ],
        "primary_parans": [
          {
            "id": "mars:dsc:true_node:mc:49.281",
            "body_a": "mars",
            "event_a": "dsc",
            "body_b": "true_node",
            "event_b": "mc",
            "distance_km": 149.4,
            "is_close": false,
            "visual_strength": "medium",
            "source_focuses": [
              "career"
            ]
          }
        ]
      },
      "match_tier": "strong",
      "rank": 3,
      "score": 119.1,
      "signal_strength": "strong",
      "summary": "Mercury MC is the strongest supportive line for this career search, with 3 nearby contributing line(s)."
    },
    {
      "city": {
        "name": "Coudekerque-Branche",
        "country": "FR",
        "state": "Hauts-de-France",
        "lat": 51.02288,
        "lng": 2.39359,
        "timezone": "Europe/Paris",
        "population": 25201
      },
      "city_visual_explanation": {
        "explanation_mode": "line_plus_paran",
        "map_line_ids": [
          "mercury:mc",
          "neptune:mc",
          "sun:mc",
          "mars:dsc",
          "true_node:mc"
        ],
        "primary_lines": [
          {
            "body": "mercury",
            "angle": "mc",
            "distance_km": 2.2,
            "line_id": "mercury:mc",
            "is_close": true,
            "visual_strength": "high",
            "source_focuses": [
              "career"
            ]
          },
          {
            "body": "neptune",
            "angle": "mc",
            "distance_km": 107.5,
            "line_id": "neptune:mc",
            "is_close": true,
            "visual_strength": "high",
            "source_focuses": [
              "career"
            ]
          }
        ],
        "primary_parans": [
          {
            "id": "mars:dsc:true_node:mc:49.281",
            "body_a": "mars",
            "event_a": "dsc",
            "body_b": "true_node",
            "event_b": "mc",
            "distance_km": 193.9,
            "is_close": false,
            "visual_strength": "medium",
            "source_focuses": [
              "career"
            ]
          }
        ]
      },
      "match_tier": "strong",
      "rank": 4,
      "score": 118.88,
      "signal_strength": "strong",
      "summary": "Mercury MC is the strongest supportive line for this career search, with 3 nearby contributing line(s)."
    },
    {
      "city": {
        "name": "Lillers",
        "country": "FR",
        "state": "Hauts-de-France",
        "lat": 50.56345,
        "lng": 2.48042,
        "timezone": "Europe/Paris",
        "population": 10104
      },
      "city_visual_explanation": {
        "explanation_mode": "line_plus_paran",
        "map_line_ids": [
          "mercury:mc",
          "neptune:mc",
          "sun:mc",
          "mars:dsc",
          "true_node:mc",
          "venus:asc",
          "pluto:mc"
        ],
        "primary_lines": [
          {
            "body": "mercury",
            "angle": "mc",
            "distance_km": 3.9,
            "line_id": "mercury:mc",
            "is_close": true,
            "visual_strength": "high",
            "source_focuses": [
              "career"
            ]
          },
          {
            "body": "neptune",
            "angle": "mc",
            "distance_km": 102.4,
            "line_id": "neptune:mc",
            "is_close": true,
            "visual_strength": "high",
            "source_focuses": [
              "career"
            ]
          }
        ],
        "primary_parans": [
          {
            "id": "mars:dsc:true_node:mc:49.281",
            "body_a": "mars",
            "event_a": "dsc",
            "body_b": "true_node",
            "event_b": "mc",
            "distance_km": 142.8,
            "is_close": false,
            "visual_strength": "medium",
            "source_focuses": [
              "career"
            ]
          }
        ]
      },
      "match_tier": "strong",
      "rank": 5,
      "score": 118.82,
      "signal_strength": "strong",
      "summary": "Mercury MC is the strongest supportive line for this career search, with 3 nearby contributing line(s)."
    }
  ],
  "map": {
    "chart_families": [
      {
        "body": "mars",
        "id": "mars:horizon",
        "kind": "horizon_cycle",
        "member_line_ids": [
          "mars:asc",
          "mars:dsc"
        ]
      },
      {
        "body": "venus",
        "id": "venus:horizon",
        "kind": "horizon_cycle",
        "member_line_ids": [
          "venus:asc",
          "venus:dsc"
        ]
      }
    ],
    "lines": [
      {
        "angle": "mc",
        "body": "mercury",
        "id": "mercury:mc"
      },
      {
        "angle": "mc",
        "body": "neptune",
        "id": "neptune:mc"
      },
      {
        "angle": "mc",
        "body": "sun",
        "id": "sun:mc"
      },
      {
        "angle": "dsc",
        "body": "mars",
        "chart_family_id": "mars:horizon",
        "id": "mars:dsc"
      },
      {
        "angle": "mc",
        "body": "true_node",
        "id": "true_node:mc"
      },
      {
        "angle": "asc",
        "body": "venus",
        "chart_family_id": "venus:horizon",
        "id": "venus:asc"
      },
      {
        "angle": "mc",
        "body": "pluto",
        "id": "pluto:mc"
      }
    ]
  }
}

Selected City Explanation

mercury MC

high

9.0 km from the city marker. Focus: career.

neptune MC

high

116.8 km from the city marker. Focus: career.

Paran: mars DSC / true_node MC

68.9 km from the city. This stays in the explanation block so the map can mention the supporting hotspot without scanning a global inventory.

Paran: venus ASC / pluto MC

112.3 km from the city. This stays in the explanation block so the map can mention the supporting hotspot without scanning a global inventory.

MapLibre Example

Render a full astrocartography chart in MapLibre

This embedded example renders the astrocartography lines contract directly in MapLibre using the same WGS84 GeoJSON geometry the API returns to clients.

MapLibre Demo

Astrocartography lines payload rendered directly on a world map.

16 lines
4 horizon cycles
ASC
DSC
MC
IC

Why this matters

The lines endpoint returns dense geodesic-style, map-ready WGS84 GeoJSON. ASC and DSC arrive as curved coordinate sequences, MC and IC arrive in the same geometry contract, and crossings are GeoJSON points when requested. When available, `chart_families` expose uninterrupted AC/DC horizon cycles so chart renderers can keep the curves continuous without reconstructing paths client-side.

Geometry: geojson, WGS84

MapLibre Source Snippet

import maplibregl from "maplibre-gl";

const horizonFamilies = (linesResponse.chart_families ?? []).map((family) => ({
  type: "Feature",
  properties: {
    id: family.id,
    body: family.body,
    stroke: "#cbd5e1",
  },
  geometry: family.geometry,
}));

const lineFeatures = linesResponse.lines.map((line) => ({
  type: "Feature",
  properties: {
    id: line.id,
    body: line.body,
    angle: line.angle,
    stroke:
      line.angle === "mc" ? "#fbbf24" :
      line.angle === "ic" ? "#34d399" :
      line.angle === "asc" ? "#38bdf8" :
      "#fb7185",
  },
  geometry: line.geometry,
}));

map.on("load", () => {
  map.addSource("astro-horizon-families", {
    type: "geojson",
    data: {
      type: "FeatureCollection",
      features: horizonFamilies,
    },
  });

  map.addLayer({
    id: "astro-horizon-families",
    type: "line",
    source: "astro-horizon-families",
    paint: {
      "line-color": ["get", "stroke"],
      "line-width": 1.8,
      "line-opacity": 0.52,
    },
  });

  map.addSource("astro-lines", {
    type: "geojson",
    data: {
      type: "FeatureCollection",
      features: lineFeatures,
    },
  });

  map.addLayer({
    id: "astro-lines",
    type: "line",
    source: "astro-lines",
    paint: {
      "line-color": ["get", "stroke"],
      "line-width": 2.5,
      "line-opacity": 0.9,
    },
  });
});

Astrocartography API FAQ

Do astrocartography endpoints require an accurate birth time?

Yes. The public astrocartography endpoints are timed calculations. Accurate birth time is required because angles, angular lines, and relocation chart outputs depend on the exact local birth instant.

What is the difference between lines, parans, and relocation?

Lines return angular world-map geometry, parans return crossing-style planetary event hotspots, and relocation returns the full relocated chart plus a summary for one destination city. They solve related but distinct product needs.

When should I use city-check instead of recommendations?

Use city-check when the destination is already known and you want a detailed multi-focus breakdown. Use recommendations when you want the API to rank cities for a chosen focus across a search scope.

Are the returned lines geodesic and ready for map rendering?

Yes. The lines payload returns dense, map-ready WGS84 GeoJSON geometry that can be drawn directly in tools like MapLibre. ASC and DSC are delivered as curved coordinate sequences, MC and IC use the same geometry contract, and the client does not need to reconstruct the path.

Ship relocation and location products faster

Get your API key, start with city scoring, and expand into maps, rankings, and relocated chart experiences as your product grows.

Explore Docs

No credit card required for free tier.