Bazowy adres: https://pesticides.apitide.dev. Wszystkie endpointy to zwykłe GET i zwracają JSON.
Klucz API podajesz w nagłówku X-API-Key (lub Authorization: Bearer <klucz>):
X-API-Key: TWÓJ_KLUCZ
„Co wolno zastosować na jabłoni przeciwko parchowi":
curl -H "X-API-Key: TWÓJ_KLUCZ" \
"https://pesticides.apitide.dev/search?crop=jab%C5%82o%C5%84&pest=parch"import requests
r = requests.get(
"https://pesticides.apitide.dev/search",
params={"crop": "jabłoń", "pest": "parch"},
headers={"X-API-Key": "TWÓJ_KLUCZ"},
)
print(r.json())const res = await fetch(
"https://pesticides.apitide.dev/search?crop=jab%C5%82o%C5%84&pest=parch",
{ headers: { "X-API-Key": "TWÓJ_KLUCZ" } }
);
console.log(await res.json());<?php
$ch = curl_init("https://pesticides.apitide.dev/search?crop=jab%C5%82o%C5%84&pest=parch");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: TWÓJ_KLUCZ"]);
echo curl_exec($ch);package main
import ("fmt"; "io"; "net/http")
func main() {
req, _ := http.NewRequest("GET",
"https://pesticides.apitide.dev/search?crop=jab%C5%82o%C5%84&pest=parch", nil)
req.Header.Set("X-API-Key", "TWÓJ_KLUCZ")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}Klientem API jest oprogramowanie — apka rolnicza/agronomiczna, e-commerce ze środkami ochrony roślin, doradca AI. Oto najczęstsze wzorce integracji:
Nazwy upraw/agrofagów pobierz raz z /crops i /pests (do podpowiedzi w UI), potem odpytuj /search?crop=…&pest=…. Wejście i tak wybacza literówki/diakrytyki, a przy pudle dostajesz suggestions — możesz je pokazać jako „czy chodziło o…”.
Zawężaj wynik parametrami: rodzaj (np. tylko Fungicyd), uzytkownik (profesjonalne/amatorskie), active_only=true (domyślnie — tylko legalne dziś). Idealne pod „pokaż dozwolone środki dla tego pola/uprawy”.
Odpowiedź /search i /products zawiera total (liczba wszystkich trafień). Stronicuj przez limit (1–200) + offset. Jeśli offset + limit < total — jest kolejna strona.
Masz numer zezwolenia produktu? Pobierz /products/{nr_zezw} i pokaż na karcie: status (aktywny/wygasa/wycofany), karencję, prewencję, ostrzeżenie dla pszczół + link do oficjalnej etykiety PDF. 404 = brak takiego numeru.
Odpytuj okresowo /meta i porównuj source_date. Gdy się zmieni — rejestr został zaktualizowany, więc warto odświeżyć dane po swojej stronie (np. przeliczyć cache).
etykieta.etykieta_url) jako źródła wiążącego.Te same dane wciągniesz bez pisania kodu — wszędzie chodzi o request GET z nagłówkiem X-API-Key.
https://pesticides.apitide.dev/searchcrop=jabłoń, pest=parchX-API-Key = TWÓJ_KLUCZhttps://pesticides.apitide.dev/search?crop=jabłoń&pest=parch · Method: GETX-API-Key = Twój klucz.https://pesticides.apitide.dev/searchcrop, pest · Headers: X-API-Key.
| Endpoint | Opis |
|---|---|
GET /search | Co wolno na danej uprawie (vs agrofag) — z dawką, karencją, prewencją, pszczołami. |
GET /products | Szukaj / listuj zarejestrowane produkty. |
GET /products/{nr_zezw} | Jeden produkt + wszystkie zastosowania. |
GET /validate | Walidacja zabiegu — czy wolno dany środek na uprawę/agrofaga w danej dawce i dniu (werdykt allowed/warning/not_allowed + rozbite powody). |
GET /crops | Słownik upraw (autouzupełnianie). |
GET /pests | Słownik agrofagów. |
GET /meta | Data źródła i rozmiary zbioru. |
Pełna interaktywna referencja: Swagger · ReDoc (ze snippetami).
| Kod | Znaczenie |
|---|---|
200 | OK. |
401 | Nieprawidłowy / nieaktywny klucz. |
404 | Produkt nie znaleziony. |
429 | Przekroczony limit (rpm lub miesięczny quota). Nagłówek X-Quota-Remaining pokazuje pozostały budżet. |
| Plan | rpm | miesięcznie |
|---|---|---|
| Darmowy (bez klucza) | 5 | ~450 |
| Podstawowy | 60 | 10 000 |
| Pro | 120 | 100 000 |
API ma wbudowany serwer MCP (Model Context Protocol) — podłącz agenta AI (np. Claude) jako konektor i pytaj naturalnym językiem; agent sam wywoła odpowiednie narzędzia.
https://pesticides.apitide.dev/mcp
Transport: Streamable HTTP (stateless). Narzędzia: search_treatments, get_product, list_crops, list_pests, dataset_info.
Dane pochodzą z oficjalnego rejestru Ministerstwa Rolnictwa i Rozwoju Wsi (MRiRW) / gov.pl (dane publiczne). Możesz wykorzystywać je w swoim produkcie — zachowaj atrybucję źródła (MRiRW / gov.pl). Dane mają charakter informacyjny; dokumentem wiążącym prawnie pozostaje etykieta produktu.
Bazę odświeżamy automatycznie, gdy MRiRW opublikuje nową wersję rejestru (zwykle ~połowa miesiąca). GET /meta zwraca source_date bieżących danych — użyj go jako sygnału świeżości lub do decyzji o re-fetchu.
Obecnie v1. Zmiany dodające pola lub endpointy są wstecznie zgodne (nie psują integracji). Zmiany łamiące poprzedzimy nową wersją i powiadomieniem na e-mail przypisany do klucza. Buduj defensywnie — ignoruj nieznane pola, nie zakładaj kolejności.
Karencja/prewencja/pszczoły pochodzą z etykiet i pokrywają ~95% produktów. Gdy dla produktu brak danych z etykiety, zwracamy etykieta_dostepna: false i etykieta_powod (czytelny powód). null przy karencji oznacza „brak informacji", a nie „karencja zero".
karencja: null?„Brak informacji” — nie „karencja zerowa”. Sprawdź etykieta.karencja (dopasowana do uprawy) i etykieta.karencja_wszystkie (wszystkie grupy). Wartość dni: 0 lub nie_wymagana: true to dopiero „karencja nie jest wymagana”. W razie wątpliwości linkuj do etykieta.etykieta_url (źródło wiążące).
karencja od karencja_wszystkie?karencja to pozycja dopasowana do uprawy z Twojego crop. karencja_wszystkie to wszystkie grupy upraw z etykiety — przydatne, gdy pytasz bez konkretnej uprawy albo chcesz pokazać pełen obraz.
maloobszarowe?Flaga zastosowania małoobszarowego (minor use) — rejestracja dla upraw o małym areale. To wciąż legalne zastosowanie; po prostu z innej ścieżki rejestracji.
uzytkownik: profesjonalne vs amatorskie?Klasa użytkownika danego zastosowania. „amatorskie” = dozwolone dla użytkownika nieprofesjonalnego; „profesjonalne” = wymaga uprawnień. Filtruj parametrem uzytkownik w /search.
status: wycofany / wygasa — czy go pokazywać?active_only=true (domyślnie) już odsiewa wycofane. wygasa = ≤90 dni do końca legalności stosowania (legalny_do) — warto ostrzec użytkownika. wycofany = nie polecaj do stosowania.
Wejście wybacza diakrytyki i wielkość liter (jablon = jabłoń). Jeśli i tak total: 0, w odpowiedzi jest suggestions z najbliższymi nazwami — pokaż je jako „czy chodziło o…”. Pełną listę wartości masz w /crops i /pests.
dawka bywa wielowierszowe / „brzydkie” — czemu?Bo to dosłowny zapis z etykiety (dawka maksymalna i zalecana, jednostki l/ha / kg/ha). Nie parsujemy go na siłę, żeby nie zgubić niuansów — wyświetlaj jak tekst albo parsuj po swojej stronie.
klasyfikacja to kody H, a nie opis?To standard CLP (np. H411). Flagę toksyczny_dla_organizmow_wodnych wyliczamy z nich gotową (H400/H410/H411/H412). Pełne znaczenie kodów H znajdziesz w dowolnej tablicy CLP.
429 — jak reagować?Sprawdź nagłówek X-Quota-Remaining. Przy darmowym tierze to limit per-IP (5/min, 15/dzień) — weź klucz. Przy kluczu to rpm lub miesięczny quota — ponów po chwili albo podnieś plan.
Pytania, problem techniczny lub większy plan? Napisz: kontakt@apitide.dev