> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oneshotagent.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Recent Imagery

> List the latest clear satellite scenes over a point or box, newest first, with cloud cover and an openable browse image.

Lists the Harmonized Landsat Sentinel-2 scenes NASA catalogued over a point or box since a date, newest first, at or under a cloud cover. Scene fields are observed; only latest is derived. Empty scenes with coverage.scenes\_considered above zero means looked and nothing clear, scenes\_too\_cloudy and scenes\_cloud\_unknown say why; zero means no pass. coverage.complete false makes every count a lower bound.

Landsat imagery courtesy of the US Geological Survey and NASA, public domain. Sentinel-2 imagery contains modified Copernicus Sentinel data, under the Copernicus Sentinel Data licence. Browse images are served by NASA LP DAAC and NASA GIBS.

## Authentication

Requires x402 payment in the `payment-signature` header.

## Request Body

**latitude** `number`

Latitude in decimal degrees; give longitude too. From -90 to 90.

**longitude** `number`

Longitude in decimal degrees; west is negative. From -180 to 180.

**bbox** `number[]`

\[west, south, east, north] in decimal degrees, at most 1 degree a side; instead of a point.

**max\_cloud\_pct** `number`

Highest scene cloud cover to list, in percent; fractions such as 20.5 are allowed. From 0 to 100. Defaults to `20`.

**since** `string`

Earliest acquisition date (UTC); default 30 days before the call, at most 1 year back. Use YYYY-MM-DD.

**limit** `integer`

Most scenes to return. From 1 to 25. Defaults to `5`.

<Snippet file="audit-context-params.mdx" />

## Response (200 OK)

Top-level envelope: `success` (boolean) and `data` (object). All fields below are nested under `data`.

**data.request\_id** `string`

Durable job ID for audit and lookup

**data.status** `string`

Job status: `completed`

**data.tool** `string`

Always `place_recent_imagery`

**data.result** `object`

The answer, described under Result below

**data.evidence** `object`

Where the answer came from and when

**data.evidence.source** `string`

The public body the data comes from. Always `US National Aeronautics and Space Administration`.

**data.evidence.source\_kind** `string`

`public` when the data comes from a public body, `commercial` otherwise

**data.evidence.retrieved\_at** `string`

When the lookup was made, as an ISO 8601 UTC time

**data.evidence.as\_of** `string | null`

The sensing start of the newest pass the catalogue holds in the window, whatever its cloud; null when there was no pass.

## Result

Nested under `data.result`.

**data.result.coverage** `object`

Coverage.

**data.result.coverage.since** `string`

The first UTC day searched.

**data.result.coverage.products** `string[]`

Products.

**data.result.coverage.scenes\_in\_window** `integer`

How many passes the catalogue holds in the window across both products, whatever their cloud, by its own count.

**data.result.coverage.scenes\_considered** `integer`

Passes examined, whatever their cloud: every pass in the window when complete is true, otherwise the newest 200 per product.

**data.result.coverage.scenes\_too\_cloudy** `integer`

Examined passes above max\_cloud\_pct.

**data.result.coverage.scenes\_cloud\_unknown** `integer`

Examined passes the source gave no cloud figure for; never listed as clear.

**data.result.coverage.complete** `boolean`

True when every pass in the window was examined and the counts are exact; false when a product had more passes than one page, so scenes\_considered, scenes\_too\_cloudy, scenes\_cloud\_unknown and total are lower bounds covering the newest passes only.

**data.result.total** `integer`

Clear scenes among the examined passes, including any beyond limit; exact when coverage.complete is true, otherwise a lower bound.

**data.result.returned** `integer`

Scenes listed.

**data.result.truncated** `boolean`

True when clear scenes beyond limit were left out, or when coverage.complete is false.

**data.result.scenes** `object[]`

Scenes.

**data.result.scenes\[].id** `string`

The granule name, for example HLS.L30.T11SLT.2026297T182822.v2.0.

**data.result.scenes\[].product** `string`

landsat (HLS L30, Landsat 8/9) or sentinel2 (HLS S30, Sentinel-2).

**data.result.scenes\[].acquired\_at** `string`

Sensing start, ISO 8601 UTC.

**data.result.scenes\[].cloud\_pct** `number | null`

Scene cloud cover the source reported, 0 to 100; null when it reported none.

**data.result.scenes\[].browse\_url** `string`

A JPEG the caller can open without a login: the granule browse image for landsat, a GIBS snapshot of the scene footprint on the acquisition day for sentinel2.

**data.result.scenes\[].granule\_url** `string`

The granule record in the NASA Common Metadata Repository.

**data.result.latest** `object | null`

The first scene, or null.

**data.result.latest.id** `string`

The granule name, for example HLS.L30.T11SLT.2026297T182822.v2.0.

**data.result.latest.product** `string`

landsat (HLS L30, Landsat 8/9) or sentinel2 (HLS S30, Sentinel-2).

**data.result.latest.acquired\_at** `string`

Sensing start, ISO 8601 UTC.

**data.result.latest.cloud\_pct** `number | null`

Scene cloud cover the source reported, 0 to 100; null when it reported none.

**data.result.latest.browse\_url** `string`

A JPEG the caller can open without a login: the granule browse image for landsat, a GIBS snapshot of the scene footprint on the acquisition day for sentinel2.

**data.result.latest.granule\_url** `string`

The granule record in the NASA Common Metadata Repository.

**data.result.derived** `object`

Derived.

**data.result.derived.latest** `object`

Latest.

**data.result.derived.latest.value** `string | null`

The id of latest. `null` when the source gives no value.

**data.result.derived.latest.rule** `string`

Rule.

**data.result.derived.latest.from** `string[]`

From.

```bash cURL theme={null}
curl -X POST https://win.oneshotagent.com/v1/tools/lookup/place-recent-imagery \
  -H "Content-Type: application/json" \
  -H "payment-signature: <base64 x402 payment>" \
  -d '{
    "latitude": 34.05,
    "longitude": -118.25,
    "limit": 2
  }'
```

```javascript JavaScript theme={null}
const response = await fetch("https://win.oneshotagent.com/v1/tools/lookup/place-recent-imagery", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "payment-signature": paymentProof,
  },
  body: JSON.stringify({
    "latitude": 34.05,
    "longitude": -118.25,
    "limit": 2
  }),
});
```

```typescript SDK theme={null}
const result = await agent.tool('lookup/place-recent-imagery', {
  latitude: 34.05,
  longitude: -118.25,
  limit: 2
});
console.log(result.result);
console.log(result.evidence);
```

```json Response (200) theme={null}
{
  "success": true,
  "data": {
    "request_id": "uuid",
    "receipt_id": "rcpt_...",
    "status": "completed",
    "tool": "place_recent_imagery",
    "result": {
      "coverage": {
        "since": "2026-09-28",
        "products": [
          "landsat",
          "sentinel2"
        ],
        "scenes_in_window": 10,
        "scenes_considered": 10,
        "scenes_too_cloudy": 0,
        "scenes_cloud_unknown": 0,
        "complete": true
      },
      "total": 10,
      "returned": 2,
      "truncated": true,
      "scenes": [
        {
          "id": "HLS.S30.T11SLT.2026297T183431.v2.0",
          "product": "sentinel2",
          "acquired_at": "2026-10-24T18:45:02.186Z",
          "cloud_pct": 0,
          "browse_url": "https://wvs.earthdata.nasa.gov/api/v1/snapshot?REQUEST=GetSnapshot&LAYERS=HLS_S30_Nadir_BRDF_Adjusted_Reflectance&CRS=EPSG%3A4326&TIME=2026-10-24&BBOX=33.3328%2C-119.1738%2C34.3377%2C-117.9694&WIDTH=1024&HEIGHT=1024&FORMAT=image%2Fjpeg",
          "granule_url": "https://cmr.earthdata.nasa.gov/search/concepts/G4388800812-LPCLOUD.umm_json"
        },
        {
          "id": "HLS.L30.T11SLT.2026297T182822.v2.0",
          "product": "landsat",
          "acquired_at": "2026-10-24T18:28:22.778Z",
          "cloud_pct": 0,
          "browse_url": "https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-public/HLSL30.020/HLS.L30.T11SLT.2026297T182822.v2.0/HLS.L30.T11SLT.2026297T182822.v2.0.jpg",
          "granule_url": "https://cmr.earthdata.nasa.gov/search/concepts/G4388797587-LPCLOUD.umm_json"
        }
      ],
      "latest": {
        "id": "HLS.S30.T11SLT.2026297T183431.v2.0",
        "product": "sentinel2",
        "acquired_at": "2026-10-24T18:45:02.186Z",
        "cloud_pct": 0,
        "browse_url": "https://wvs.earthdata.nasa.gov/api/v1/snapshot?REQUEST=GetSnapshot&LAYERS=HLS_S30_Nadir_BRDF_Adjusted_Reflectance&CRS=EPSG%3A4326&TIME=2026-10-24&BBOX=33.3328%2C-119.1738%2C34.3377%2C-117.9694&WIDTH=1024&HEIGHT=1024&FORMAT=image%2Fjpeg",
        "granule_url": "https://cmr.earthdata.nasa.gov/search/concepts/G4388800812-LPCLOUD.umm_json"
      },
      "derived": {
        "latest": {
          "value": "HLS.S30.T11SLT.2026297T183431.v2.0",
          "rule": "newest_scene_at_or_under_max_cloud_pct",
          "from": [
            "scenes.acquired_at",
            "scenes.cloud_pct",
            "input.max_cloud_pct"
          ]
        }
      }
    },
    "evidence": {
      "source": "US National Aeronautics and Space Administration",
      "source_kind": "public",
      "retrieved_at": "2026-10-28T12:00:00.000Z",
      "calls": [
        {
          "retrieved_at": "2026-10-28T12:00:00.000Z"
        },
        {
          "retrieved_at": "2026-10-28T12:00:00.000Z"
        }
      ],
      "as_of": "2026-10-24T18:45:02.186Z"
    }
  }
}
```

> [!NOTE]
>
> See [Pricing](https://docs.oneshotagent.com/pricing.md) for this tool's price. A wallet (x402) call receives it in the 402 quote before anything is charged; a call paid from prepaid credits is charged when the API accepts the request and answers `200`.

## Notes

* Scenes are 30 m; each product passes every 2 to 3 days. Open ocean and the poles are not imaged. derived.latest names its rule and the fields it reads.
* Give latitude and longitude, or bbox as \[west, south, east, north] in decimal degrees at most 1 degree a side; not both.
* since (YYYY-MM-DD, UTC) defaults to 30 days before the call and may be at most 1 year back. max\_cloud\_pct (0 to 100) defaults to 20. limit defaults to 5, at most 25.
* coverage.scenes\_considered counts every examined pass whatever its cloud; scenes\_too\_cloudy those above max\_cloud\_pct; scenes\_cloud\_unknown those the source gave no cloud figure for, which are never listed as clear. coverage.scenes\_in\_window is the catalogue's own count of passes in the window. When scenes\_considered is zero the sensor had no pass: an empty list is then no evidence either way.
* At most the newest 200 passes per product are examined. coverage.complete is true when that is every pass in the window, so the counts and total are exact; false when older passes were left unexamined, so scenes\_considered, scenes\_too\_cloudy, scenes\_cloud\_unknown and total are lower bounds and truncated is true. truncated is also true when clear scenes beyond limit were left out.
* A landsat browse\_url is the granule browse JPEG. Sentinel-2 granules carry none, so their browse\_url is a GIBS Worldview snapshot of the HLS Sentinel-2 layer over the scene footprint on the acquisition day: a daily composite, not the single granule.
* cloud\_pct is the whole-scene figure the source reported; a clear scene may still have cloud over the exact point.
* Results return inline. The finished job stays available at `/v1/requests/{request_id}`


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.