Istraživački API /api/v1
Pristup čitanju podataka operativnog središta za završne radove, istraživanje i skripte nadležnih službi: detekcije aktivnih požara (NASA FIRMS/GWIS), opožarene površine (EFFIS), opasnost od požara (FWI) i mreža zemaljskih senzora kao sirovi nizovi.
Pristup i ključevi
Ključeve izdaje operator (samoLabs): zahtjev s imenom, ustanovom i svrhom uporabe na info@samolabs.de. Istraživački ključevi su besplatni i vremenski ograničeni; svaki ključ vrijedi za jednu osobu ili jedan sustav.
Svaki zahtjev za podacima nosi ključ kao Bearer token u zaglavlju Authorization:
Authorization: Bearer ffw_YOUR_KEY
401 znači: nema ključa ili je nepoznat. Pribavite pristup. 403 znači: ključ je poznat, ali je blokiran ili istekao. Javite se operatoru. Prazan rezultat uz HTTP 200 znači, naprotiv: provjereno, nema ničega.
Vrijedi ograničenje od 120 zahtjeva u minuti po ključu. Kod 429 poštujte zaglavlje Retry-After.
Krajnje točke
Pet krajnjih točaka s podacima, sve uz ključ, sve u formatu GeoJSON i CSV:
- GET /api/v1/hotspots
- Detekcije aktivnih požara s punim sirovim stupcima izvora (temperature sjaja, dimenzije piksela, FRP, oznaka proizvoda). Detekcije su pikseli, a ne broj požara.
- GET /api/v1/burnt-areas
- Perimetri opožarenih površina iz EFFIS-a sa svim opisnim atributima. Geometrija je u GeoJSON inačici; CSV inačica je pripadajuća atributna tablica.
- GET /api/v1/fire-danger
- Opasnost od požara kao vremenski niz sa svim podindeksima kanadskog sustava FWI (FFMC, DMC, DC, ISI, BUI). Točno jedan model po odgovoru; referentne razine country i adminArea nikada ne miješati.
- GET /api/v1/sensor-stations
- Popis postaja mreže zemaljskih senzora: matični podaci uz mjerne nizove, uključujući oznaku simulated.
- GET /api/v1/sensor-readings
- Mjerni nizovi senzorske mreže kao nedodirljive sirove vrijednosti u 10-minutnom taktu; ?series=corrected vraća (ubuduće verzionirani) korekcijski sloj.
Potpuni, strojno čitljiv ugovor dostupan je kao dokument OpenAPI 3.0 na GET /api/v1/docs i može se izravno učitati u Swagger UI ili Postman.
Formati i vremenski prozori
Svaka krajnja točka vraća GeoJSON (RFC 7946, s dodatnim meta blokom), a uz ?format=csv i CSV inačicu: odvojenu zarezima, s jednim retkom zaglavlja, UTF-8. Bez dodatnih postavki čitaju je pandas.read_csv i readr::read_csv.
Vremenski prozor dolazi iz ?from i ?to (ISO 8601; sam datum vrijedi kao ponoć po UTC-u). Za ponovljive izvatke uvijek navedite obje granice. Stvarno korišteni prozor stoji u meta.window. Ako meta.truncated javi skraćivanje, suzite prozor; parametra offset namjerno nema.
Svaki JSON odgovor nosi meta.observation: je li lanac podataka koji ga hrani uopće radio i koliko je star njegov posljednji uspjeh. Prazna zbirka znači „motreno, ništa nije pronađeno“; HTTP 503 znači „nije provjereno“. Te dvije tvrdnje nikada ne izjednačavati.
Ponovljivost: obveze verzije v1
Dio putanje /v1 obveza je stabilnosti prema radovima koji su u tijeku: unutar v1 polja, parametri, enum vrijednosti i kodovi pogrešaka nikada se ne uklanjaju, ne preimenuju niti im se mijenja značenje. Proširenja su isključivo aditivna. Prekid bi značio /v2, uz dokumentirano prijelazno razdoblje za v1.
Svi vremenski žigovi su ISO 8601 u UTC-u. Istraživački podaci nikada ne prelaze u prikaznu vremensku zonu. Lokalno vrijeme sučelja samo je prikaz.
Senzorska mreža sadrži simulirane demo postaje. Svaka postaja i svaki mjerni redak zato nose polje simulated; analize ga filtriraju kao prvi korak. Simulirani nizovi ne pojavljuju se ni u jednom skupu podataka prikladnom za citiranje.
?series=raw vraća nedodirljiv sirovi niz. ?series=corrected je korekcijski sloj: trenutačno vraća iste sirove vrijednosti, ali s correctionModel: null, „nijedna korekcija nije primijenjena“ kao tvrdnju koja se može citirati. Kada se naknadno ugrade serverski, verzionirani modeli korekcije (bias vlage, čimbenici kolokacije), correctionModel će nositi oznaku modela, a da se oblik odgovora pritom ne mijenja.
Primjeri
Primjeri namjerno nisu prevedeni; HOST zamijenite adresom instalacije.
Dohvat uz curl
curl -H "Authorization: Bearer ffw_YOUR_KEY" \ "https://HOST/api/v1/hotspots?from=2026-07-01&to=2026-08-01&country=BA&format=csv" \ -o hotspots_ba_2026-07.csv
Python (pandas)
import io
import requests
import pandas as pd
resp = requests.get(
"https://HOST/api/v1/sensor-readings",
params={"from": "2026-06-01", "to": "2026-07-01",
"series": "raw", "format": "csv"},
headers={"Authorization": "Bearer ffw_YOUR_KEY"},
timeout=60,
)
resp.raise_for_status()
df = pd.read_csv(io.StringIO(resp.text), parse_dates=["measuredAtUtc"])
df = df[~df["simulated"]] # always drop simulated demo stationsR (httr2 + readr)
library(httr2)
library(readr)
resp <- request("https://HOST/api/v1/fire-danger") |>
req_url_query(model = "effis", from = "2026-06-01",
to = "2026-08-01", format = "csv") |>
req_auth_bearer_token("ffw_YOUR_KEY") |>
req_perform()
danger <- read_csv(resp_body_string(resp))
danger <- subset(danger, level == "adminArea") # never mix reference levels