Perseverance
Landed February 18, 2021. Searching for signs of ancient life.
Browse images from NASA's Perseverance and Curiosity rovers by sol, Earth date or camera. Send a request and get clean JSON back, with no sign-up and no key.
Built for developers, educators, artists and citizen scientists. Data comes from NASA's raw image feeds.
Two active missions, each with its own set of cameras for navigation, engineering and science.
Landed February 18, 2021. Searching for signs of ancient life.
Landed August 6, 2012. Studying Mars' climate and geology.
Every request is a GET against the base URL. Open any example below to see the raw JSON.
Retrieve a single photo by its unique identifier.
GET/photos/{id}
Photos from a specific Martian day since landing.
GET/rovers/{rover}/photos?sol={sol_number}
Photos taken on a specific Earth calendar date.
GET/rovers/{rover}/photos?earth_date={YYYY-MM-DD}
Add a camera abbreviation to any sol or date search.
GET/rovers/{rover}/photos?sol={sol}&camera={camera_abbr}
The most recent photos a rover has sent back.
GET/rovers/{rover}/latest_photos
Landing date, max sol, total photos, and photo counts per sol.
GET/manifests/{rover_name}
You don't need a NASA badge. Call the API from any language or straight from the browser.
fetch('https://rovers.nebulum.one/api/v1/rovers/curiosity/photos?earth_date=2026-02-15')
.then(res => res.json())
.then(data => console.log(data));
{
"photos": [{
"id": 91453,
"sol": 4809,
"camera": { "id": 28, "name": "MAHLI",
"full_name": "Mars Hand Lens Imager" },
"img_src": "https://mars.nasa.gov/msl-raw-images/...jpg",
"earth_date": "2026-02-15",
"rover": { "id": 2, "name": "Curiosity",
"landing_date": "2012-08-06" }
}]
}
A full response for this sol includes 24 photos from several cameras (MAHLI, FHAZ, RHAZ, NAV). Each photo is organized by sol (Martian day since landing) and earth_date.
Each camera has its own job. Color cameras suit science and outreach; grayscale ones handle navigation and safety.
| Camera | Type | Color | Purpose |
|---|---|---|---|
| EDL_RUCAM | EDL | Color | Parachute deployment during landing |
| EDL_RDCAM | EDL | Color | Terrain during descent |
| EDL_DDCAM | EDL | Color | Landing sequence from descent stage |
| EDL_PUCAM1 | EDL | Color | Parachute during descent |
| EDL_PUCAM2 | EDL | Color | Backup parachute monitoring |
| NAVCAM_LEFT | Navigation | Gray | Stereo navigation and path planning |
| NAVCAM_RIGHT | Navigation | Gray | Stereo navigation and path planning |
| MCZ_RIGHT | Science | Color | Zoomable color panoramas and geology |
| MCZ_LEFT | Science | Color | Zoomable color panoramas and geology |
| FRONT_HAZCAM_LEFT_A | Engineering | Gray | Obstacles in the rover's path |
| FRONT_HAZCAM_RIGHT_A | Engineering | Gray | Obstacles in the rover's path |
| REAR_HAZCAM_LEFT | Engineering | Gray | Terrain behind the rover |
| REAR_HAZCAM_RIGHT | Engineering | Gray | Terrain behind the rover |
| SKYCAM | Atmospheric | Color | Sky, clouds and atmosphere (MEDA) |
| SHERLOC_WATSON | Science | Color | Close-up macro of rock textures |
| Camera | Type | Color | Purpose |
|---|---|---|---|
| FHAZ | Engineering | Gray | Obstacles ahead of the rover |
| RHAZ | Engineering | Gray | Terrain behind the rover |
| MAST | Science | Color | Color panoramas and geology |
| CHEMCAM | Science | Gray | Laser target spot imaging |
| MAHLI | Science | Color | Close-ups of rocks and soil |
| MARDI | EDL | Color | Landing descent images |
| NAVCAM | Navigation | Gray | Stereo navigation and path planning |
Anything else? Reach out through nebulum.one.
No. The API is free and requires no authentication. Just send a GET request.
A sol is one Martian day since the rover landed. An Earth date is the regular calendar date. You can search by either one.
Photos are served from NASA's raw image feeds. Each result includes an img_src link to the original image.
Use /rovers/{rover}/latest_photos, or check the manifest endpoint for a rover's max sol and max date.
Perseverance and Curiosity. Use the rover name in the URL, for example /rovers/perseverance/photos.
Choose a rover and a sol. This sends a real request to the API and shows the first few photos.