# Locus Large-Site Satellite Change (Sentinel-2 Before/After PNGs)

> Locus Large-Site Satellite Change (Sentinel-2 Before/After PNGs) is a paid API for AI agents from api.locus.report, paid per call via x402, $0.15/call, status unknown (last checked 2026-09-14).

Returns two dated Sentinel-2 Level-2A PNG images (before and after) for a caller-supplied bounding box, rendered via Copernicus, to provide visual area context for large sites.

## Facts

- Endpoint: POST https://api.locus.report/api/locus-large-site-satellite-change
- Price: $0.15/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/locus-large-site-satellite-change-sentinel-2-before-after-pngs-a5568954
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_8q_Wp6-lyAXA8GS87xw65

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability locus-large-site-satellite-change-sentinel-2-before-after-pngs-a5568954 -d '<json body>'
```

Example prompt: Pull before-and-after Sentinel-2 satellite images for the site bounded by [-104.99, 39.73, -104.97, 39.75], using 2024-01-15 as the before date and 2024-07-15 as the after date, a 30-day search window, max 20% cloud cover, and label it 'Denver Industrial Parcel' at 512px resolution.

## When to prefer this

Choose this endpoint when you need visual, satellite-based area context for a large site (1–100 km²) using official Copernicus Sentinel-2 data, particularly for before/after comparison across two dates. Best suited for due diligence, land use monitoring, construction tracking, environmental review, or any task requiring cloud-filtered, dated 10m-resolution imagery without making change or damage claims. Prefer this over commercial imagery APIs when Copernicus official catalogue sourcing and transparent cloud-cover filtering matter, and when cost-per-call pricing (only charged on success) is preferred.

## Known failure modes

- Scene discovery fails (no suitable Sentinel-2 tiles found in window) — returns diagnostic with charged:false and caveats listing the failure
- Cloud cover threshold too strict — no qualifying tiles returned within window
- Bounding box too large (>100 km²) or too small (<1 km²) — validation error
- Invalid date format or before/after date order incorrect — schema validation error
- Rendering failure via Copernicus — diagnostic returned with charged:false
- windowDays too short (under 7) or too long (over 90) — schema validation error
- maxCloudCoverage exceeds 60 — schema rejection
- Payment failure via x402 — 402 response before processing begins

## How this service works

Requires bbox [west,south,east,north] WGS84 and beforeDate/afterDate (YYYY-MM-DD, after later). No address input: use free locus_satellite_area_prepare first. Area 1-100 sq km; each side >=500 m; aspect <=8:1. Two dated Copernicus Sentinel-2 images, not detected change or building condition. Private, no-store, REST-only; no charge on source failure. npx @velinussage/locus-agent-skill add.

## Output

A JSON diagnostic object with status, a 'kind' field ('large_site_satellite_change_diagnostic'), two dated Sentinel-2 Level-2A PNG image URLs or data (before and after), Copernicus catalogue candidate metadata, per-tile cloud cover percentages, caveats list, a 'charged' boolean, and a generatedAt timestamp. No change, damage, or condition claims are made by Locus; images are 10m/pixel area context only. Not charged if scene discovery or rendering fails.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "bbox": {
   "type": "array"
  },
  "size": {
   "type": "integer",
   "default": 512,
   "maximum": 1024,
   "minimum": 256
  },
  "afterDate": {
   "type": "string",
   "format": "date",
   "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
  },
  "areaLabel": {
   "type": "string",
   "maxLength": 120,
   "minLength": 1
  },
  "beforeDate": {
   "type": "string",
   "format": "date",
   "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
  },
  "windowDays": {
   "type": "integer",
   "default": 30,
   "maximum": 90,
   "minimum": 7
  },
  "maxCloudCoverage": {
   "type": "integer",
   "default": 30,
   "maximum": 60,
   "minimum": 0
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "kind": "large_site_satellite_change_diagnostic",
  "status": "not_configured",
  "caveats": [
   "No provider request was made."
  ],
  "charged": false,
  "message": "Example diagnostic; the rollout is not configured.",
  "generatedAt": "2026-09-09T00:00:00.000Z"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/locus-large-site-satellite-change-sentinel-2-before-after-pngs-a5568954/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.locus.report](https://www.zero.xyz/host/api.locus.report/llms.txt)
