DEV Community

Alex Spinov
Alex Spinov

Posted on

NASA Has 5 Free APIs — Track Asteroids, Mars Photos & Space Weather (No Auth Required)

Last month, a friend texted me: "Hey, there's an asteroid heading toward Earth today — should I worry?"

Instead of Googling, I wrote 3 lines of Python. Turns out NASA gives you completely free access to their asteroid tracking database. No API key signup, no rate limits worth worrying about, no paywall.

Here are 5 NASA APIs every developer should know — with working code.


1. Astronomy Picture of the Day (APOD)

NASA has published a stunning space photo every single day since June 16, 1995. That's 11,000+ images — all accessible via API.

import requests

response = requests.get("https://api.nasa.gov/planetary/apod", 
    params={"api_key": "DEMO_KEY"})
data = response.json()

print(f"Today: {data['title']}")
print(f"Image: {data.get('hdurl', data['url'])}")
print(f"Explanation: {data['explanation'][:200]}...")
Enter fullscreen mode Exit fullscreen mode

Use case: Build a daily Slack bot that posts space photos. Or create a "This Day in Space" calendar.


2. Near-Earth Object (NEO) Tracker

This is the asteroid API. It tracks every object that comes close to Earth.

import requests
from datetime import date

today = date.today().isoformat()
response = requests.get("https://api.nasa.gov/neo/rest/v1/feed",
    params={"start_date": today, "end_date": today, "api_key": "DEMO_KEY"})
data = response.json()

for neo in data["near_earth_objects"][today]:
    name = neo["name"]
    hazardous = neo["is_potentially_hazardous_asteroid"]
    speed = neo["close_approach_data"][0]["relative_velocity"]["kilometers_per_hour"]
    distance = neo["close_approach_data"][0]["miss_distance"]["kilometers"]

    emoji = "Warning" if hazardous else "Safe"
    print(f"{emoji} {name}: {float(speed):,.0f} km/h, {float(distance):,.0f} km away")
Enter fullscreen mode Exit fullscreen mode

Today there are 10 asteroids approaching Earth. Most are harmless. But the API flags "potentially hazardous" ones automatically.

Use case: Asteroid alert dashboard. Science education app. Or just impress people at parties.


3. Mars Rover Photos

Curiosity and Perseverance are still taking photos on Mars right now. Every photo is free via API.

import requests

response = requests.get(
    "https://api.nasa.gov/mars-photos/api/v1/rovers/curiosity/latest_photos",
    params={"api_key": "DEMO_KEY"})
photos = response.json()["latest_photos"][:5]

for photo in photos:
    cam = photo['camera']['full_name']
    print(f"Camera: {cam}, Date: {photo['earth_date']}")
    print(f"  URL: {photo['img_src']}")
Enter fullscreen mode Exit fullscreen mode

Use case: Mars photo gallery. Compare rover positions over time. Train CV models on alien terrain.


4. Earth Imagery (Landsat/Sentinel)

Get satellite photos of any location on Earth by latitude/longitude.

import requests

response = requests.get("https://api.nasa.gov/planetary/earth/imagery",
    params={"lat": 48.8566, "lon": 2.3522, "dim": 0.1, "api_key": "DEMO_KEY"})

if response.status_code == 200:
    with open("paris_from_space.png", "wb") as f:
        f.write(response.content)
    print("Saved satellite image of Paris")
Enter fullscreen mode Exit fullscreen mode

Use case: Environmental monitoring. Urban growth analysis. Before/after disaster imagery.


5. DONKI — Space Weather

Track solar flares, geomagnetic storms, and coronal mass ejections.

import requests

response = requests.get("https://api.nasa.gov/DONKI/FLR",
    params={"startDate": "2026-03-01", "endDate": "2026-03-25", "api_key": "DEMO_KEY"})
flares = response.json()

print(f"Solar flares in March 2026: {len(flares)}")
for flare in flares[:3]:
    print(f"  Class: {flare.get('classType', '?')}, Peak: {flare.get('peakTime', '?')}")
Enter fullscreen mode Exit fullscreen mode

Use case: Aurora prediction. Satellite operators need this for orbit planning. Radio operators track it for signal interference.


Getting a Real API Key (Free, 30 Seconds)

DEMO_KEY works but has low rate limits (30 req/hour). Get a real key:

  1. Go to api.nasa.gov
  2. Enter your email
  3. Get your key instantly — no credit card, no OAuth, no approval process

Real key: 1,000 requests per hour. Enough for any project.


Why This Matters

Most developers pay for data APIs. NASA gives you:

  • Asteroid tracking in real-time
  • Mars photos from active rovers
  • Satellite imagery of any place on Earth
  • Space weather data
  • 11,000+ astronomy photos with explanations

All free. All JSON. All no-auth (with DEMO_KEY) or instant-key.


What would you build with NASA data? I'm thinking of combining the asteroid API with a Telegram bot that alerts when something big comes close. Drop your ideas in the comments.


I write about free APIs that most developers don't know about. Follow for more.

My other API guides:

Need a custom data pipeline or API integration? Hire me

Top comments (0)