# One site watched from orbit, free

> One site's readings: its thermal anomalies, dated Sentinel-2 views (latest, and before/after each anomaly, true colour and SWIR; context, never damage proof), FIRMS detections a day for 90 days and, for a port, weekly occupancy per satellite orbit with its normal band and every pass.

Source: https://firmtape.com/docs/developers/geo/free-site

One site's readings: its thermal anomalies, dated Sentinel-2 views (latest, and before/after each anomaly, true colour and SWIR; context, never damage proof), FIRMS detections a day for 90 days and, for a port, weekly occupancy per satellite orbit with its normal band and every pass.

`GET https://firmtape.com/geo/api/sites/{id}`

Plan Free · No key · Limit Free JSON, one site&#39;s readings · Version 1.0.0

**This endpoint serves:** [GEO: The map and the feed](https://firmtape.com/docs/geo#records-map), [GEO: The API, webhooks and MCP](https://firmtape.com/docs/geo#geo-api). **Plan:** [Free](https://firmtape.com/features/replay). Free, no account

## Parameters

| Name | What it does | Default | Error |
| --- | --- | --- | --- |
| `id` (required) path, string | A site id from /sites, e.g. ru-tuapse-refinery |  |  |

## Response

{ site, anomalies, views, firms_daily, occupancy, attribution }

## Errors

| Status | Code | What to do |
| --- | --- | --- |
| 404 |  | No such site |

## Request

```sh
curl \
  "https://firmtape.com/geo/api/sites/p_4f2a9c"
```

```python
import os, requests

H = {}
r = requests.get("https://firmtape.com/geo/api/sites/p_4f2a9c", headers=H)
print(r.status_code, r.text[:500])
```

```js
const r = await fetch("https://firmtape.com/geo/api/sites/p_4f2a9c", {
  method: "GET",
  headers: {  },
});
console.log(r.status, await r.text());
```
