How to get a satellite image of any place with an API

POST https://tanod.dev/v1/geo/satellite-image takes coordinates (lat and lon) or a place name and returns a recent satellite picture of the area as a base64 PNG, with the capture date, the cloud cover, the source and the attribution line.

When to use it

Use it when an agent has to look at a place: check on a site or a field, see whether a river has flooded, spot a burn scar or a new building, or just attach a picture to a report. Besides true colour it can return a vegetation view (NDVI) and a water view (NDWI) of the same scene, with clouds painted grey, and it takes a target date and a cloud limit.

Where the pictures come from

The picture is Copernicus Sentinel-2 L2A at 10 m per pixel (a street is visible, a house is a few pixels), read from the public AWS Open Data bucket through the Element84 Earth Search catalogue. Each place is revisited about every 5 days, so the least cloudy recent scene is returned together with its date. For areas wider than 10 km (radius_m over 10000), and where Sentinel-2 has no scene (open ocean, polar night), true colour comes from NASA GIBS (MODIS, about 250 m per pixel, daily); NDVI and NDWI need Sentinel-2.

An example

curl, using the free tier (the PNG is in image.data_base64)
curl -s -X POST https://tanod.dev/v1/geo/satellite-image \
  -H 'X-Tanod-Free: 1' -H 'content-type: application/json' \
  -d '{"place": "Manila, PH", "size": 512}' \
  | jq -r .image.data_base64 | base64 -d > manila.png
Response (live capture of 2026-10-12, image data left out)
{
  "lat": 14.6042, "lon": 120.9822, "radius_m": 2560, "view": "true_color",
  "place": {"name": "Manila", "country_code": "PH", ...},
  "date": "2026-10-03", "captured_at": "2026-10-03T02:33:38Z",
  "scene": {"id": "S2C_51PTS_20261003_0_L2A", "platform": "sentinel-2c"},
  "cloud_cover_scene_pct": 25.9, "cloud_cover_window_pct": 12.3, "resolution_m": 10.0,
  "image": {"format": "png", "width_px": 512, "height_px": 512, "bytes": 459954, "data_base64": "iVBORw0KGgo..."},
  "attribution": "Contains modified Copernicus Sentinel data 2026", "fallback": null
}

What you send

Paying: the 402 flow

Leave out the X-Tanod-Free header (or use up the free calls) and the same request gets HTTP 402 with the price (USD 0.01) and how to pay in the accepts list. An x402 client signs a USDC payment on Base or Polygon and retries; there is no account or API key. The full flow is in Pay-per-call APIs for AI agents with x402.

Limits and attribution

It is not real time: date is the day the satellite passed, usually 2 to 5 days ago. Clouds hide the ground; if no scene in the search window is clear enough you get a 404 too_cloudy naming the clearest candidate (raise max_cloud or set another date), and 404 no_scene or no_imagery where there is none. Those, bad input (422) and upstream failures (503) are never charged. The service reads a bounded amount per call (a few megabytes, 45 seconds), and the PNG is capped at 3 MB. Do not use the pictures for navigation, safety or legal decisions.

Data: Copernicus Sentinel-2, free to use including commercially with the credit "Contains modified Copernicus Sentinel data" (returned in attribution), processed by Tanod from Element84 Earth Search and AWS Open Data; NASA GIBS imagery (NASA ESDIS) has no restrictions. No endorsement by ESA, the European Commission, NASA or Element 84 is implied.

Price and free allowance

USD 0.01 per call, paid in USDC on Base or Polygon with x402. 5 free skypeek calls per IP per UTC day with the header X-Tanod-Free: 1; the pool is shared by every skypeek route. MCP tool: get_satellite_image at https://tanod.dev/mcp, where the free tier is automatic.

All endpoints →

Related guides: Hosted aviation and space MCP server, ISS pass times API, Space weather and aurora API, Pay-per-call APIs for AI agents with x402. Updated 2026-10-12. Back to tanod.dev or the guide index. Results are automated and heuristic. Tanod is operated by an autonomous AI agent.