Back to Docs

Astrocartography Recommendations

Astrocartography Recommendations

POST/api/v1/western/astrocartography/recommendations

Rank candidate cities for a specific relocation focus. The live response combines line, paran, and relocation-chart signals, then returns explainable scores, nearby line references, and optional map geometry for relocation-style apps.

Full URL

https://api.freeastroapi.com/api/v1/western/astrocartography/recommendations

How Ranking Works

Recommendation ranking is deterministic. The API scores candidate cities from the filtered pool, then labels the overall result quality with signal_strength, confidence, and match_tier.

The endpoint returns ranked cities even when matches are weak or mixed. It does not hide the ranking just because the top score is modest.

include_crossings defaults to false and requires High-plan access when enabled.

Request Body Parameters

ParameterTypeReqDescription
natalobjectYesSame timed natal request block used across the Western endpoints. Recommendations require known birth time and resolved coordinates.
focusstringYesPrimary scoring focus. Live production supports "career", "romance", "home", "health", and "spiritual".
country_scopestringNoGeographic scope selector. Supported values are "own_country", "selected_countries", and "all".
countrystringNoOptional single-country filter used with country-scoped searches.
countriesarray[string]NoOptional country-code list used with selected-country searches. The live example passes FR, ES, and PT.
limitintegerNoMaximum number of ranked cities returned. The live example requests 10.
min_populationintegerNoLower population bound for candidate cities. The live example uses 100000.
max_populationintegerNoOptional upper population bound for the candidate city pool.
city_sizestringNoOptional size bucket filter. Supported values are "small", "medium", "large", and "mega".
modestringNoCalculation mode. Defaults to "in_mundo". "projected" is also supported.
bodiesarray[string]NoOptional subset of bodies to use in scoring and optional map output.
anglesarray[string]NoOptional subset of "asc", "dsc", "mc", and "ic".
topocentricbooleanNoOptional topocentric calculation mode. Defaults to false.
nearby_radius_kmnumberNoDistance radius used when looking for nearby cities in the scoring flow. Defaults to 1000.0.
paran_orb_degnumberNoPrimary paran orb. Defaults to 1.0.
paran_tail_degnumberNoExtended paran tail band. Defaults to 2.0.
include_map_linesbooleanNoWhen true, the response includes a map-ready `map` block with line geometry. This is enabled in the live response example.
include_crossingsbooleanNoDefaults to false. Crossing enrichment is High-plan only because intersection discovery and hotspot interpretation are much heavier than plain ranking.
include_paran_summarybooleanNoControls whether paran detail blocks are included in each ranked result.
include_relocation_summarybooleanNoControls whether the lighter relocation summary block is included in each ranked result.

Sample Code

This request is the real live production payload used on April 14, 2026, with the API key redacted.

curl -X POST "https://api.freeastroapi.com/api/v1/western/astrocartography/recommendations" \
 -H "Content-Type: application/json" \
 -H "x-api-key: YOUR_API_KEY" \
 -d '{
  "natal": {
    "year": 1995,
    "month": 9,
    "day": 5,
    "hour": 20,
    "minute": 0,
    "city": "Paris",
    "lat": 48.8566,
    "lng": 2.3522,
    "tz_str": "Europe/Paris",
    "time_known": true,
    "house_system": "placidus"
  },
  "focus": "home",
  "country_scope": "selected_countries",
  "countries": ["FR", "ES", "PT"],
  "limit": 10,
  "min_population": 100000
}'

Real Response Example

This is a trimmed version of the real production response. The ranking and field values are real. Repeated map geometry is abbreviated so the example stays readable in the docs.

{
  "meta": {
    "focus": "home",
    "mode": "in_mundo",
    "country_scope": "selected_countries",
    "city_size": null,
    "population_min": 100000,
    "population_max": null,
    "bodies": [
      "sun",
      "moon",
      "mercury",
      "venus",
      "mars",
      "jupiter",
      "saturn",
      "uranus",
      "neptune",
      "pluto",
      "true_node"
    ],
    "angles": ["asc", "dsc", "mc", "ic"],
    "timezone": "Europe/Paris",
    "candidate_count": 79,
    "scored_count": 79,
    "signal_strength": "moderate",
    "confidence": "medium",
    "match_tier": "mixed",
    "no_strong_matches": false
  },
  "warnings": [
    "Astrocartography results are exploratory and should be treated as directional rather than deterministic."
  ],
  "results": [
    {
      "city": {
        "name": "Lille",
        "country": "FR",
        "state": "Hauts-de-France",
        "lat": 50.63391,
        "lng": 3.05512,
        "timezone": "Europe/Paris",
        "population": 238695
      },
      "distance_from_natal_km": 204.0,
      "score": 10.33,
      "summary": "No strong home lines were found, but the closest supportive line is Sun IC at about 6109.8 km.",
      "supporting_line_id": "sun:ic",
      "distance_to_line_km": 6109.8,
      "nearest_point_on_line": {
        "type": "Point",
        "coordinates": [89.683877, 50.63391]
      },
      "supporting_line_polarity": "mixed",
      "top_factors": [],
      "nearest_favorable_distance_km": 6109.8,
      "nearest_challenging_distance_km": 5912.5,
      "nearest_favorable_line": {
        "body": "sun",
        "angle": "ic",
        "line_id": "sun:ic",
        "distance_km": 6109.8,
        "nearest_point_on_line": {
          "type": "Point",
          "coordinates": [89.683877, 50.63391]
        }
      },
      "nearest_challenging_line": {
        "body": "saturn",
        "angle": "ic",
        "line_id": "saturn:ic",
        "distance_km": 5912.5,
        "nearest_point_on_line": {
          "type": "Point",
          "coordinates": [159.336799, 50.63391]
        }
      },
      "line_score": 0.0,
      "paran_score": 10.33,
      "relocation_score": 0.0,
      "top_parans": [
        {
          "id": "sun:asc:jupiter:ic:51.254",
          "body_a": "sun",
          "event_a": "asc",
          "body_b": "jupiter",
          "event_b": "ic",
          "latitude": 51.254,
          "distance_km": 69.0,
          "score": 9.87
        }
      ],
      "nearest_favorable_paran": {
        "id": "sun:asc:jupiter:ic:51.254",
        "body_a": "sun",
        "event_a": "asc",
        "body_b": "jupiter",
        "event_b": "ic",
        "latitude": 51.254,
        "distance_km": 69.0
      },
      "nearest_challenging_paran": null,
      "rank": 1,
      "relocation_summary": {
        "resolved_timezone": "Europe/Paris",
        "angles": {
          "asc": 332.074,
          "mc": 258.436,
          "ic": 78.436,
          "dc": 152.074
        },
        "angular_planets": [],
        "dominant_themes": [],
        "summary_short": "Relocated chart is not strongly angular for the tracked bodies.",
        "summary_caution": "No strong relocated angular pressure was detected."
      },
      "signal_strength": "moderate",
      "match_tier": "mixed"
    },
    {
      "city": {
        "name": "Gasteiz / Vitoria",
        "country": "ES",
        "state": "Basque Country",
        "lat": 42.84998,
        "lng": -2.67268,
        "timezone": "Europe/Madrid",
        "population": 257407
      },
      "distance_from_natal_km": 772.6,
      "score": 7.91,
      "summary": "No strong home lines were found, but the closest supportive line is Sun IC at about 7529.0 km.",
      "line_score": 0.0,
      "paran_score": 7.91,
      "relocation_score": 0.0,
      "top_parans": [
        {
          "id": "mercury:ic:uranus:dsc:42.879",
          "body_a": "mercury",
          "event_a": "ic",
          "body_b": "uranus",
          "event_b": "dsc",
          "latitude": 42.879,
          "distance_km": 3.2,
          "score": 7.91
        }
      ],
      "relocation_summary": {
        "resolved_timezone": "Europe/Madrid",
        "angular_planets": [
          {
            "body": "jupiter",
            "angle": "mc",
            "orb_deg": 5.87,
            "house": 9
          }
        ],
        "dominant_themes": ["career", "spiritual"],
        "summary_short": "Relocated chart emphasizes career, spiritual through Jupiter MC.",
        "summary_caution": "Main caution is balance: strong angular emphasis can still narrow life around a few themes."
      },
      "signal_strength": "moderate",
      "match_tier": "mixed"
    }
  ],
  "map": {
    "meta": {
      "geometry_format": "geojson",
      "coordinate_reference_system": "WGS84",
      "line_sample_step_degrees": 0.25,
      "crossing_count": 0
    },
    "...": "map line geometry continues when include_map_lines is enabled"
  }
}

Response Fields

FieldMeaning
meta.focusResolved focus used for the ranked search.
meta.country_scopeResolved geographic scope after request validation.
meta.population_min / meta.population_maxPopulation filters that were actually applied to the candidate pool.
meta.candidate_count / meta.scored_countHow many candidate cities were considered and how many were scored.
meta.signal_strength / meta.confidence / meta.match_tierTop-level quality labels for the returned ranking. These are useful when top matches are clustered or generally weak.
meta.no_strong_matchesBoolean flag indicating that the API did not find a clearly strong match for the chosen focus and filters.
results[].cityGeoService-shaped city payload with name, country, state, coordinates, timezone, and population.
results[].scoreRaw total recommendation score used for ranking. It is the sum of line, paran, and relocation components.
results[].line_score / results[].paran_score / results[].relocation_scorePer-technique score breakdown for explainable ranking.
results[].summaryShort explanation suited to relocation UI cards or result lists.
results[].supporting_line_id / distance_to_line_km / nearest_point_on_line / supporting_line_polarityPrimary line link for the ranked city. This is the line the client can highlight directly on the map, with the nearest point already resolved.
results[].top_paransHighest-impact nearby parans contributing to the score for that city.
results[].nearest_favorable_line / results[].nearest_challenging_lineClosest supportive and challenging line references used in the explanation layer. Each reference carries `line_id` plus a GeoJSON `nearest_point_on_line`.
results[].relocation_summaryLighter relocation-chart summary with resolved timezone, angular planets, dominant themes, and short interpretation text.
mapOptional embedded GeoJSON line payload for drawing the same search on a world map when `include_map_lines` is enabled.