π Need More Details?
Comprehensive guides, code examples, and technical specifications
Query 1.18M pre-analyzed sites across the lunar south pole (-90Β° to -83.5Β° latitude). Turn weeks of manual GIS analysis into a single API call.
Get free API access and help shape the future of lunar mission planning
Built by mission planners, for mission planners
1.18M sites with 60+ features each. Terrain metrics from NASA LOLA (5m resolution) and illumination data from LROC.
Smart site scoring with plain English reasoning. Know exactly why each site is recommended for your mission.
Sub-100ms queries with PostGIS spatial indexing. Get results instantly instead of waiting hours for GIS analysis.
GeoJSON for QGIS/ArcGIS, KML for Google Earth, CSV for Excel. Integrate with your existing workflows.
Optimized scoring for Artemis human landing, robotic landers, rover traverses, and custom mission profiles.
99.98% data completeness with professional curation. Built on authoritative NASA datasets.
Rapidly evaluate thousands of candidate sites for Artemis or commercial lunar missions. Get mission-specific recommendations in seconds.
Access processed NASA datasets for lunar geology, terrain analysis, or illumination studies. Free academic tier available.
Export pre-analyzed data directly to QGIS or ArcGIS. Skip the manual raster processing and focus on insights.
Find accessible terrain for rover traverses. Evaluate slope, roughness, and illumination along potential routes.
Get started in 30 seconds with any programming language
# Find the 5 safest landing sites near lunar south pole import requests response = requests.get( "https://lunarlandingsiteapi.up.railway.app/api/v1/recommendations", headers={"X-API-Key": "your_key_here"}, params={ "lat": -89.5, "lon": 45, "mission_type": "artemis", "top_n": 5 } ) # Get plain English reasoning for top site top_site = response.json()["recommendations"][0] print(top_site["reasoning"]) # Output: "Exceptional safety (hazard 0.92) with excellent visibility (95.2%)..."
Everything you need to start using the API in 5 minutes
ldp_live_...)Most endpoints require an API key in the X-API-Key header:
curl -H "X-API-Key: ldp_live_YOUR_KEY_HERE" \ "https://lunarlandingsiteapi.up.railway.app/api/v1/recommendations?lat=-89.5&lon=45"
GET /health - API health checkGET /docs - Interactive documentationGET /api/v1/recommendations - Get site recommendationsGET /api/v1/sites/search - Search for sitesPOST /api/v1/sites/batch - Batch site lookupPOST /api/v1/compare - Compare multiple sites| Tier | Daily Limit | Status |
|---|---|---|
| Beta | 100 requests/day | Free during beta |
| Premium | Coming soon | Coming soon |
{
"user": {
"email": "you@example.com",
"tier": "beta",
"requests_today": 45,
"requests_remaining": 55
}
}import requests
API_KEY = "ldp_live_YOUR_KEY_HERE"
headers = {"X-API-Key": API_KEY}
response = requests.get(
"https://lunarlandingsiteapi.up.railway.app/api/v1/recommendations",
headers=headers,
params={"lat": -89.5, "lon": 45, "mission_type": "artemis", "top_n": 10}
)
data = response.json()
print(f"Requests remaining: {data['user']['requests_remaining']}")const API_KEY = "ldp_live_YOUR_KEY_HERE";
const response = await fetch(
'https://lunarlandingsiteapi.up.railway.app/api/v1/recommendations?lat=-89.5&lon=45',
{ headers: { 'X-API-Key': API_KEY } }
);
const data = await response.json();
console.log(`Requests remaining: ${data.user.requests_remaining}`);curl -H "X-API-Key: ldp_live_YOUR_KEY_HERE" \ "https://lunarlandingsiteapi.up.railway.app/api/v1/recommendations?lat=-89.5&lon=45&mission_type=artemis&top_n=10"
| Status Code | Error | Solution |
|---|---|---|
| 401 | Missing API key | Add X-API-Key header |
| 403 | Invalid API key | Check your key in welcome email |
| 429 | Rate limit exceeded | Wait until tomorrow or upgrade |
| 422 | Invalid parameters | Check parameter format |
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
data = response.json()
except requests.exceptions.HTTPError as e:
if e.response.status_code == 401:
print("Missing API key!")
elif e.response.status_code == 403:
print("Invalid API key!")
elif e.response.status_code == 429:
print("Rate limit exceeded")API_KEY = os.getenv("LUNAR_API_KEY")Comprehensive guides, code examples, and technical specifications