🚀 Szybki start

1. Podstawy

Bazowy adres: https://pesticides.apitide.dev. Wszystkie endpointy to zwykłe GET i zwracają JSON.

Uwierzytelnianie

Klucz API podajesz w nagłówku X-API-Key (lub Authorization: Bearer <klucz>):

X-API-Key: TWÓJ_KLUCZ
Bez klucza działa darmowy tier (5 zapytań/min, 15/dzień, z Twojego IP) — wystarczy do testów. Produkcyjnie weź klucz: cennik.

2. Pierwsze zapytanie

„Co wolno zastosować na jabłoni przeciwko parchowi":

curl Python JavaScript PHP Go
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))
}

3. Typowe scenariusze (dla integratorów)

Klientem API jest oprogramowanie — apka rolnicza/agronomiczna, e-commerce ze środkami ochrony roślin, doradca AI. Oto najczęstsze wzorce integracji:

Autouzupełnianie → wyszukiwanie

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…”.

Łączenie filtrów

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”.

Paginacja

Odpowiedź /search i /products zawiera total (liczba wszystkich trafień). Stronicuj przez limit (1–200) + offset. Jeśli offset + limit < total — jest kolejna strona.

Wzbogacenie strony/karty produktu (e-commerce)

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.

Wykrywanie zmian w rejestrze

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).

Dane mają charakter informacyjny — w produkcie końcowym zalecamy linkować do oficjalnej etykiety (etykieta.etykieta_url) jako źródła wiążącego.

4. Integracje no-code

Te same dane wciągniesz bez pisania kodu — wszędzie chodzi o request GET z nagłówkiem X-API-Key.

n8n

1. Dodaj node HTTP Request.
2. Method: GET · URL: https://pesticides.apitide.dev/search
3. Query Parameters: crop=jabłoń, pest=parch
4. Headers: X-API-Key = TWÓJ_KLUCZ
5. Uruchom — JSON trafia do kolejnych nodów.

Make (Integromat)

1. Moduł HTTP → Make a request.
2. URL: https://pesticides.apitide.dev/search?crop=jabłoń&pest=parch · Method: GET
3. Headers: dodaj X-API-Key = Twój klucz.
4. Parse response: Yes — dostajesz gotowy obiekt.

Zapier

1. Akcja Webhooks by Zapier → Custom Request (wymaga planu z Webhooks).
2. Method: GET · URL: https://pesticides.apitide.dev/search
3. Query String Params: crop, pest · Headers: X-API-Key.
Dla agentów AI / generatorów klientów: pełna specyfikacja OpenAPI pozwala wygenerować klienta w dowolnym języku jednym poleceniem.

5. Endpointy

EndpointOpis
GET /searchCo wolno na danej uprawie (vs agrofag) — z dawką, karencją, prewencją, pszczołami.
GET /productsSzukaj / listuj zarejestrowane produkty.
GET /products/{nr_zezw}Jeden produkt + wszystkie zastosowania.
GET /validateWalidacja zabiegu — czy wolno dany środek na uprawę/agrofaga w danej dawce i dniu (werdykt allowed/warning/not_allowed + rozbite powody).
GET /cropsSłownik upraw (autouzupełnianie).
GET /pestsSłownik agrofagów.
GET /metaData źródła i rozmiary zbioru.

Pełna interaktywna referencja: Swagger · ReDoc (ze snippetami).

6. Limity i błędy

KodZnaczenie
200OK.
401Nieprawidłowy / nieaktywny klucz.
404Produkt nie znaleziony.
429Przekroczony limit (rpm lub miesięczny quota). Nagłówek X-Quota-Remaining pokazuje pozostały budżet.

Limity planów

Planrpmmiesięcznie
Darmowy (bez klucza)5~450
Podstawowy6010 000
Pro120100 000

7. Dla agentów AI (MCP)

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.

Maszynowy opis API dla LLM-ów: /llms.txt · pełna specyfikacja: /openapi.json.

8. Dane, aktualność i wersjonowanie

Źródło i licencja

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.

Jak często aktualizujemy

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.

Wersjonowanie i stabilność

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.

Pokrycie danymi z etykiet

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".

9. FAQ i przypadki brzegowe

Co oznacza 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).

Czym różni się 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.

Co to 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.

Czym jest uzytkownik: profesjonalne vs amatorskie?

Klasa użytkownika danego zastosowania. „amatorskie” = dozwolone dla użytkownika nieprofesjonalnego; „profesjonalne” = wymaga uprawnień. Filtruj parametrem uzytkownik w /search.

Produkt ma 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.

Dlaczego nazwa uprawy „nie działa”?

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.

Pole 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.

Dlaczego 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.

Limit 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.

🧪 Wypróbuj API w przeglądarce Zobacz cennik

Pytania, problem techniczny lub większy plan? Napisz: kontakt@apitide.dev

Dane mają charakter informacyjny — dokumentem wiążącym prawnie pozostaje etykieta produktu. Źródło: MRiRW / gov.pl.