Preskoči na sadržaj
Adios Developeri
Adios Radar API 1.0

Zaseban paket, zasebni ključevi. API za vijesti i MCP imaju svoje dokumentaciju i svoje ključeve.

Radar API dokumentacija

Sve javne obavijesti Adios Radara kao podaci: opozivi i sigurnosna upozorenja (HAPIH, EU RASFF, Safety Gate), proizvodi s EAN/GTIN kodovima, serije i rokovi, tvrtke i trgovine, trajni slijed promjena, članci portala o opozivima i potpisani webhookovi.

Adresahttps://adios.hr/api/v1/radar
KljučRadar ključ adios_radar_… · više
FormatJSON (UTF-8), nazivi u snake_case, vremena u UTC (ISO 8601)
OpenAPI/api/v1/openapi.json (Radar pozivi imaju x-adios-package: radar)
Paket7 dana besplatno, zatim 19 € mjesečno. Neograničeni pozivi, cijela arhiva.
Arhiva870 javnih obavijesti · 4 izvora · 93 trgovina

Brzi početak

  1. Pokrenite probu
    Prijavite se i otvorite Radar konzolu. Uz 7 dana probe dobivate prvi Radar ključ; prikazuje se samo jednom.
  2. Pozovite API
    export ADIOS_RADAR_KEY="adios_radar_…"
    curl "https://adios.hr/api/v1/radar/notices?limit=5&lang=hr" -H "Authorization: Bearer $ADIOS_RADAR_KEY"
  3. Čitajte data
    Svaki odgovor je {"data": …, "meta": …}. Obavijest ima sva polja odmah, bez dodatnih poziva.

Isprobajte bez ključa: u Radar konzoli odaberete poziv, filtre iz kataloga i kliknete Pošalji. Poziv ide kao vaš račun, a rezultat vidite kao kartice sa svim poljima ili kao cijeli JSON.

Radar ključevi

Radar ima svoje ključeve. Ključ šaljite u zaglavlju, na jedan od dva načina:

Authorization: Bearer adios_radar_AbC123…
X-Api-Key: adios_radar_AbC123…
  • Radar ključ je „adios_radar_” i 40 slova i znamenki. Radi samo za /api/v1/radar.
  • Ključevi se ne dijele: API ključ (adios_…) na Radaru vraća 403 radar_key_required, a Radar ključ na API-ju za vijesti ili MCP-u 403 api_key_required.
  • Do 10 aktivnih Radar ključeva po računu, u Radar konzoli. Čuvamo samo otisak (SHA-256): izgubljeni ključ opozovite i napravite novi. Opozvani ključ prestaje raditi odmah.
  • Ključ ne stavljajte u kod koji se izvršava u pregledniku ili mobilnoj aplikaciji: zovite Radar sa svog servera.

Paket i pozivi

StanjeŠto radi
trial7 dana od pokretanja u konzoli: sve, bez ograničenja. Proba se pokreće jednom po korisniku.
activePlaćeni pristup (19 € mjesečno, dogovor e-poštom, bez automatske naplate): sve, bez ograničenja.
expiredPozivi vraćaju 403 radar_expired, isporuke stoje i čekaju. Rade samo subscription, popis webhookova, isporuke, pauza i brisanje.
suspendedKao expired, uz 403 radar_suspended.
  • Radar ne troši pozive paketa za vijesti i nema ograničenja u minuti ni danu, pa nema ni X-RateLimit zaglavlja.
  • Popisi vraćaju do 100 stavki po stranici; izvoz cijele arhive do 5.000 obavijesti u jednom odgovoru. Arhiva nema vremensko ograničenje.
  • Svaki poziv je u zapisniku konzole (i pozivi iz konzole, kao kanal console).

Odgovori

{
  "data": [ … ],
  "meta": {
    "count": 25,
    "has_more": true,
    "next_cursor": "eyJ0aW1l…",     # pošaljite kao cursor
    "snapshot_at": "2026-10-14T09:30:00Z",
    "sync_cursor": "1842",          # changes?after= nakon uvoza
    "package": "radar",
    "took_ms": 14
  }
}
  • data je popis ili objekt. Prazna polja se ne šalju; prazan popis znači da izvor to nije objavio.
  • Straničenje je kursorom: dok je has_more=true, pošaljite next_cursor kao cursor uz potpuno iste filtre i limit. Kursor drži snapshot_at, pa nove obavijesti ne pomiču stranice.
  • Filtri se kombiniraju (I). from je uključiv, to isključiv; datum (2026-10-01) ili ISO 8601 vrijeme.

Greške

{ "error": { "code": "radar_key_required", "message": "Radar takes a Radar key (adios_radar_…), not an API key. …", "docs": "https://adios.hr/developers/radar/docs#errors" } }
HTTPcodeZnačenje
400invalid_parameter, missing_parameter, invalid_body, invalid_urlParametar, kursor, tijelo ili HTTPS adresa nisu dobri; poruka kaže što.
401key_required, invalid_keyNema ključa, ili je pogrešan ili opozvan.
403radar_key_required, api_key_requiredKljuč drugog paketa: Radar traži Radar ključ, API za vijesti API ključ.
403radar_not_started, radar_expired, radar_suspended, account_suspendedProvjerite paket u konzoli.
404not_found, unknown_endpointNema takve javne obavijesti ili članka, webhook nije vaš ili poziv ne postoji.
429too_many_wrong_keysPreviše pogrešnih ključeva s iste adrese; pričekajte minutu.
500 / 503internal_error, unavailablePrivremeni problem; ponovite za malo.

Obavijesti

Obavijesti

Radar ključ
GET/api/v1/radar/notices

Javne obavijesti sa svim poljima: tekst i prijevodi, proizvodi, EAN/GTIN, serije, rokovi, tvrtke, trgovine, slike, izvor i veze. Cijela arhiva, filtri se kombiniraju (I). Stranica do 100: sljedeću daje offset (offset=100) ili, za sinkronizaciju, meta.next_cursor kao cursor uz iste filtre.

ParametarTipOpis
lang string Jezik glavnog teksta (zadano hr). Prijevodi su uvijek u translations[].
hr · en
limit integer Broj stavki, 1–100 (zadano 25).
npr. 25
offset integer Preskače prvih N stavki, 0–10.000 (zadano 0): stranica bez kursora (offset=100 uz limit=100 je druga stotina). S cursor se zanemaruje.
npr. 100
tracker string Ključ Radara iz kataloga (trackers[].key).
npr. product-recalls
source string Ključ izvora iz kataloga (sources[].key).
npr. hapih-obavijesti
category string Ključ kategorije iz kataloga (categories[].key).
npr. food
hazard string Ključ opasnosti iz kataloga (hazards[].key).
npr. microbial
store string Slug trgovine iz kataloga (stores[].slug).
npr. lidl
gtin string Točan EAN/GTIN; vodeće nule ostaju.
npr. 3830000000000
lot string Točna oznaka serije (LOT). S gtin traži isti proizvod.
npr. L2410
brand string Robna marka, bez obzira na velika i mala slova.
npr. Primjer
country string Zemlja podrijetla, ISO 3166-1 alpha-2.
npr. HR
risk string Razina rizika.
serious · high · medium · low · unknown
notice_type string Vrsta obavijesti.
recall · withdrawal · warning · update · cancellation · other
children boolean Samo proizvodi za djecu (kategorije s concerns_children).
npr. true
q string Tekst u naslovu i tekstu obavijesti (do 200 znakova).
npr. salmonela
from datetime Objavljeno od, uključivo (UTC, ISO 8601).
npr. 2026-01-01T00:00:00Z
to datetime Objavljeno prije, isključivo (UTC).
npr. 2026-10-01T00:00:00Z
updated_since datetime Izmijenjeno od, uključivo (UTC).
npr. 2026-10-01T00:00:00Z
sort string Redoslijed (zadano newest).
newest · oldest · updated
cursor string meta.next_cursor prethodne stranice; isti filtri i limit.
curl "https://adios.hr/api/v1/radar/notices?lang=en&limit=5" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY"

Jedna obavijest

Radar ključ
GET/api/v1/radar/notices/{id}

Sva javna polja jedne obavijesti, s vezama na raniju obavijest, dopune i povlačenje.

ParametarTipOpis
id obavezno string · path UUID obavijesti, članka ili webhooka.
lang string Jezik glavnog teksta (zadano hr). Prijevodi su uvijek u translations[].
hr · en
curl "https://adios.hr/api/v1/radar/notices/{id}" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY"

Izvoz cijele arhive

Radar ključ
GET/api/v1/radar/export

Sve javne obavijesti koje odgovaraju filtrima, sa svim poljima, u jednom odgovoru (do 5000), najnovije prvo. Za prvi uvoz; zatim pratite changes od meta.sync_cursor.

ParametarTipOpis
lang string Jezik glavnog teksta (zadano hr). Prijevodi su uvijek u translations[].
hr · en
tracker string Ključ Radara iz kataloga (trackers[].key).
npr. product-recalls
source string Ključ izvora iz kataloga (sources[].key).
npr. hapih-obavijesti
category string Ključ kategorije iz kataloga (categories[].key).
npr. food
hazard string Ključ opasnosti iz kataloga (hazards[].key).
npr. microbial
store string Slug trgovine iz kataloga (stores[].slug).
npr. lidl
gtin string Točan EAN/GTIN; vodeće nule ostaju.
npr. 3830000000000
lot string Točna oznaka serije (LOT). S gtin traži isti proizvod.
npr. L2410
brand string Robna marka, bez obzira na velika i mala slova.
npr. Primjer
country string Zemlja podrijetla, ISO 3166-1 alpha-2.
npr. HR
risk string Razina rizika.
serious · high · medium · low · unknown
notice_type string Vrsta obavijesti.
recall · withdrawal · warning · update · cancellation · other
children boolean Samo proizvodi za djecu (kategorije s concerns_children).
npr. true
q string Tekst u naslovu i tekstu obavijesti (do 200 znakova).
npr. salmonela
from datetime Objavljeno od, uključivo (UTC, ISO 8601).
npr. 2026-01-01T00:00:00Z
to datetime Objavljeno prije, isključivo (UTC).
npr. 2026-10-01T00:00:00Z
updated_since datetime Izmijenjeno od, uključivo (UTC).
npr. 2026-10-01T00:00:00Z
curl "https://adios.hr/api/v1/radar/export?lang=en" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY"

Članci o opozivima

Članci o opozivima

Radar ključ
GET/api/v1/radar/articles

Članci hrvatskih portala o opozivima (tema Povlačenje proizvoda), najnoviji prvo, cijela arhiva. Naslov, opis, Adios adresa i izvor; tekst ostaje na izvornom jeziku. Jedan rezultat po priči.

ParametarTipOpis
limit integer Broj stavki, 1–100 (zadano 25).
npr. 25
offset integer Preskače prvih N stavki, 0–10.000 (zadano 0): stranica bez kursora (offset=100 uz limit=100 je druga stotina). S cursor se zanemaruje.
npr. 100
provider string Slug portala.
npr. index
q string Tekst u naslovu ili opisu.
npr. salmonela
from datetime Objavljeno od, uključivo (UTC).
npr. 2026-01-01T00:00:00Z
to datetime Objavljeno prije, isključivo (UTC).
npr. 2026-10-01T00:00:00Z
cursor string meta.next_cursor prethodne stranice; isti filtri i limit.
curl "https://adios.hr/api/v1/radar/articles?limit=5" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY"

Jedan članak

Radar ključ
GET/api/v1/radar/articles/{id}

Javni podaci jednog članka o opozivu.

ParametarTipOpis
id obavezno string · path UUID obavijesti, članka ili webhooka.
curl "https://adios.hr/api/v1/radar/articles/{id}" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY"

Katalog i promjene

Katalog

Radar ključ
GET/api/v1/radar/catalogue

Sve što filtar ili polje može biti: Radari, izvori (s vremenom zadnje provjere), kategorije, opasnosti i trgovine s brojem javnih obavijesti, te sve fiksne vrijednosti (enums) sa značenjem: rizik, vrsta obavijesti, uloga tvrtke, vrsta promjene, webhook događaji, vrste slika, jezici i redoslijed.

ParametarTipOpis
lang string Jezik glavnog teksta (zadano hr). Prijevodi su uvijek u translations[].
hr · en
curl "https://adios.hr/api/v1/radar/catalogue?lang=en" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY"

Promjene

Radar ključ
GET/api/v1/radar/changes

Trajni slijed objava, izmjena, povlačenja i uklanjanja, najstarije prvo. after=latest daje početnu točku, after=0 čita od početka slijeda. Uz svaku promjenu je trenutačno javno stanje obavijesti (ne povijesna snimka).

ParametarTipOpis
lang string Jezik glavnog teksta (zadano hr). Prijevodi su uvijek u translations[].
hr · en
limit integer Broj stavki, 1–100 (zadano 25).
npr. 25
after string ID zadnje obrađene promjene, ili latest (zadano 0).
npr. 0
curl "https://adios.hr/api/v1/radar/changes?after=0&limit=20" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY"

Paket

Moj Radar paket

Radar ključ
GET/api/v1/radar/subscription

Stanje paketa (trial, active, expired, suspended), kraj probe i plaćeni pristup. Radi i nakon isteka.

curl "https://adios.hr/api/v1/radar/subscription" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY"

Webhook pozivi

Moji Radar webhookovi

Radar ključ
GET/api/v1/radar/webhooks

Radar webhookovi računa, bez tajni.

curl "https://adios.hr/api/v1/radar/webhooks" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY"

Novi webhook

Radar ključ
POST/api/v1/radar/webhooks

HTTPS webhook za promjene obavijesti (radar.change, zadano) ili članke (radar.article). Filtri su neobavezni: tracker, category, hazard, store i gtin za obavijesti, provider za članke. Tajna za potpis vraća se samo ovdje.

ParametarTipOpis
url obavezno string · body Javni HTTPS URL.
npr. https://example.com/radar
name string · body Naziv.
npr. My shop
event string · body Pretplata.
radar.change · radar.article
lang string · body Jezik glavnog teksta (zadano hr). Prijevodi su uvijek u translations[].
hr · en
tracker string · body Ključ Radara iz kataloga (trackers[].key).
npr. product-recalls
category string · body Ključ kategorije iz kataloga (categories[].key).
npr. food
hazard string · body Ključ opasnosti iz kataloga (hazards[].key).
npr. microbial
store string · body Slug trgovine iz kataloga (stores[].slug).
npr. lidl
gtin string · body Točan EAN/GTIN; vodeće nule ostaju.
npr. 3830000000000
provider string · body Slug portala, samo za radar.article.
npr. index
curl -X POST "https://adios.hr/api/v1/radar/webhooks" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"My shop","url":"https://example.com/radar","event":"radar.change","category":"food","lang":"en"}'

Test webhooka

Radar ključ
POST/api/v1/radar/webhooks/{id}/test

Šalje potpisan POST (test=true) na spremljeni URL: primjer, odabranu javnu obavijest ili članak, ili vlastiti JSON u data. Vraća HTTP status vašeg servera, trajanje, grešku i poslani payload. Ne dira redovne isporuke.

ParametarTipOpis
id obavezno string · path UUID obavijesti, članka ili webhooka.
type string · body Testni događaj.
radar.created · radar.updated · radar.cancelled · radar.removed · radar.article
notice_id string · body UUID javne obavijesti (radar.change).
article_id string · body UUID javnog članka (radar.article).
data object · body Vlastiti JSON objekt (do 16.000 znakova) umjesto ID-ja.
curl -X POST "https://adios.hr/api/v1/radar/webhooks/{id}/test" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"radar.updated","data":{"message":"Hello from Adios Radar"}}'

Pauza i nastavak

Radar ključ
POST/api/v1/radar/webhooks/{id}/state

active=false pauzira, active=true nastavlja od neisporučene promjene.

ParametarTipOpis
id obavezno string · path UUID obavijesti, članka ili webhooka.
active obavezno boolean · body Uključen.
npr. true
curl -X POST "https://adios.hr/api/v1/radar/webhooks/{id}/state" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"active":false}'

Isporuke

Radar ključ
GET/api/v1/radar/webhooks/{id}/deliveries

Zadnji pokušaji isporuke: događaj, HTTP status, trajanje i greška.

ParametarTipOpis
id obavezno string · path UUID obavijesti, članka ili webhooka.
limit integer Broj stavki, 1–100 (zadano 25).
npr. 25
curl "https://adios.hr/api/v1/radar/webhooks/{id}/deliveries" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY"

Brisanje webhooka

Radar ključ
DELETE/api/v1/radar/webhooks/{id}

Briše vlastiti Radar webhook.

ParametarTipOpis
id obavezno string · path UUID obavijesti, članka ili webhooka.
curl -X DELETE "https://adios.hr/api/v1/radar/webhooks/{id}" \
  -H "Authorization: Bearer $ADIOS_RADAR_KEY"

Obavijest: sva polja

Isti oblik u notices, notices/{id}, export, changes i webhookovima.

PoljeTipZnačenje
iduuidStalan ID obavijesti.
trackerstringKljuč Radara (trackers[].key u katalogu).
languagehr | enJezik glavnog teksta. Ako traženog prijevoda nema, kaže koji je stigao.
title, summary, bodystringNaslov, kratki sažetak i cijeli javni tekst.
reasonstring?Zašto je proizvod povučen.
advicestring?Što kupac treba učiniti.
urlurlObavijest na Adios Radaru.
translations[]object[]Svi jezici: language, title, summary, body, reason, advice, url.
category, hazardobject?key, name, slug, concerns_children. Ključevi su u katalogu i ispod, u Vrijednostima.
riskenumserious, high, medium, low, unknown.
notice_typeenumrecall, withdrawal, warning, update, cancellation, other.
cancelledbooleanObavijest je povučena. To nije potvrda da je proizvod siguran.
brandstring?Robna marka.
origin_countrystring?Zemlja podrijetla, ISO 3166-1 alpha-2.
issued_bystring?Tijelo koje je izdalo obavijest.
published_atdatetimeObjava kod izvora (UTC).
detected_atdatetimeKad ju je Radar pronašao. Stara obavijest pronađena danas ima stari published_at i novi detected_at.
updated_atdatetimeZadnja izmjena na Radaru.
source_urlurlIzvorna obavijest.
sourceobjectkey, name, publisher, publisher_short_name, publisher_url, language, checking_enabled, check_interval_minutes, last_checked_at, last_success_at.
image_urlurl?Glavna slika, na izvornoj adresi.
images[]object[]url, alt_text, kind (product, label, document).
products[]object[]name, brand, variant, gtin, lots[], best_before (kako piše izvor), best_before_date (datum, kad se dade pročitati). GTIN i LOT su stringovi; vodeće nule ostaju.
companies[]object[]role (producer, importer, distributor, retailer, other), name, address, country_code.
stores[]object[]Trgovine: name, slug (slug je filtar store).
earlier_notice_iduuid?Ranija obavijest koju ova dopunjuje ili povlači.
cancelled_by_iduuid?Obavijest koja je povukla ovu.
update_ids[]uuid[]Kasnije dopune ove obavijesti.
editorialbooleanObavijest je objavilo uredništvo Adiosa, ne izvor.

Primjer: GET /api/v1/radar/notices?limit=1 (izmišljen proizvod)

{
  "data": [
    {
      "id": "6f1c2a4e-8b3d-4c5e-9a7f-1d2e3f4a5b6c",
      "tracker": "product-recalls",
      "language": "hr",
      "title": "Opoziv: svježi sir Primjer 250 g zbog Listeria monocytogenes",
      "summary": "Mljekara Primjer opoziva svježi sir 250 g, serija L26281, zbog bakterije Listeria monocytogenes.",
      "body": "Hrvatska agencija za poljoprivredu i hranu obavještava potrošače o opozivu proizvoda svježi sir Primjer 250 g …",
      "reason": "U proizvodu je utvrđena Listeria monocytogenes.",
      "advice": "Proizvod ne konzumirati i vratiti ga u prodavaonicu u kojoj je kupljen.",
      "url": "https://adios.hr/radar/opozivi/opoziv-svjezi-sir-primjer-250-g-zbog-listeria-monocytogenes-6f1c2a4e",
      "translations": [
        {
          "language": "en",
          "title": "Recall: Primjer fresh cheese 250 g due to Listeria monocytogenes",
          "summary": "Mljekara Primjer recalls its fresh cheese 250 g, batch L26281, due to Listeria monocytogenes.",
          "body": "The Croatian Agency for Agriculture and Food informs consumers of the recall of Primjer fresh cheese 250 g …",
          "reason": "Listeria monocytogenes was found in the product.",
          "advice": "Do not eat the product; return it to the shop where it was bought.",
          "url": "https://adios.hr/en/radar/recalls/recall-primjer-fresh-cheese-250-g-due-to-listeria-monocytogenes-6f1c2a4e"
        },
        {
          "language": "hr",
          "title": "Opoziv: svježi sir Primjer 250 g zbog Listeria monocytogenes",
          "summary": "Mljekara Primjer opoziva svježi sir 250 g, serija L26281, zbog bakterije Listeria monocytogenes.",
          "body": "Hrvatska agencija za poljoprivredu i hranu obavještava potrošače o opozivu proizvoda svježi sir Primjer 250 g …",
          "reason": "U proizvodu je utvrđena Listeria monocytogenes.",
          "advice": "Proizvod ne konzumirati i vratiti ga u prodavaonicu u kojoj je kupljen.",
          "url": "https://adios.hr/radar/opozivi/opoziv-svjezi-sir-primjer-250-g-zbog-listeria-monocytogenes-6f1c2a4e"
        }
      ],
      "category": {
        "key": "food",
        "name": "Hrana",
        "slug": "hrana",
        "concerns_children": false
      },
      "hazard": {
        "key": "microbial",
        "name": "Mikrobiološka kontaminacija",
        "slug": "mikrobioloska-kontaminacija",
        "concerns_children": false
      },
      "risk": "serious",
      "notice_type": "recall",
      "cancelled": false,
      "brand": "Primjer",
      "origin_country": "HR",
      "issued_by": "Hrvatska agencija za poljoprivredu i hranu",
      "published_at": "2026-10-12T09:30:00Z",
      "detected_at": "2026-10-12T09:37:00Z",
      "updated_at": "2026-10-12T09:39:00Z",
      "source_url": "https://www.hapih.hr/opoziv-svjezi-sir-primjer-250-g/",
      "source": {
        "key": "hapih-obavijesti",
        "name": "HAPIH – obavijesti za potrošače",
        "publisher": "Hrvatska agencija za poljoprivredu i hranu",
        "publisher_short_name": "HAPIH",
        "publisher_url": "https://www.hapih.hr/kategorija/obavijesti-za-potrosace/",
        "language": "hr",
        "checking_enabled": true,
        "check_interval_minutes": 10,
        "last_checked_at": "2026-10-14T09:34:00Z",
        "last_success_at": "2026-10-14T09:34:00Z"
      },
      "image_url": "https://www.hapih.hr/wp-content/uploads/2026/10/svjezi-sir-primjer.jpg",
      "images": [
        {
          "url": "https://www.hapih.hr/wp-content/uploads/2026/10/svjezi-sir-primjer.jpg",
          "alt_text": "Svježi sir Primjer, prednja strana",
          "kind": "product"
        }
      ],
      "products": [
        {
          "name": "Svježi sir 250 g",
          "brand": "Primjer",
          "variant": "250 g",
          "gtin": "3850000000017",
          "lots": [
            "L26281",
            "L26282"
          ],
          "best_before": "20.10.2026.",
          "best_before_date": "2026-10-20"
        }
      ],
      "companies": [
        {
          "role": "producer",
          "name": "Mljekara Primjer d.o.o.",
          "address": "Primjerska 1, 10000 Zagreb",
          "country_code": "HR"
        }
      ],
      "stores": [
        {
          "name": "Trgovina Primjer",
          "slug": "trgovina-primjer"
        }
      ],
      "update_ids": [],
      "editorial": false
    }
  ],
  "meta": {
    "next_cursor": "eyJ0aW1lIjoiMjAyNi0xMC0xMlQwOTozMDowMFoiLCJpZCI6IjZmMWMyYTRlIn0",
    "has_more": true,
    "snapshot_at": "2026-10-14T09:30:00Z",
    "sync_cursor": "1842",
    "count": 1,
    "package": "radar",
    "took_ms": 14
  }
}

Članak o opozivu: polja

Članci hrvatskih portala s temom Povlačenje proizvoda: novinarsko praćenje opoziva, odvojeno od službenih obavijesti. Jedan rezultat po priči.

PoljeTipZnačenje
iduuidID članka na Adiosu.
title, descriptionstringNaslov i opis portala, na izvornom jeziku (bez punog teksta).
urlurlČlanak na Adiosu.
sourceobjectname, slug i url članka na portalu.
published_at, discovered_atdatetimeObjava na portalu i kad ga je Adios pročitao.
languagestringJezik članka.
theme, theme_urlstring, urlTema Povlačenje proizvoda i njezina stranica.
{
  "id": "77ff2052-07e8-45d9-a5cb-be861cc084c1",
  "title": "Inspektorat se oglasio o rajčicama: \u0027Nabavljali su ih sezonski ugostiteljski objekti...\u0027",
  "description": "Državni inspektorat potvrdio je da su cherry rajčice iz Italije, u kojima je otkrivena salmonela, nabavljene od sezonskih ugostiteljskih objekata.",
  "url": "https://adios.hr/inspektorat-se-oglasio-o-rajcicama-nabavljali-su-ih-sezonski-ugostiteljski-objekti-77ff2052",
  "source": {
    "name": "24sata",
    "slug": "24sata",
    "url": "https://www.24sata.hr/news/inspektorat-se-oglasio-o-rajcicama-nabavljali-su-ih-sezonski-ugostiteljski-objekti-1160564"
  },
  "published_at": "2026-10-12T16:00:00Z",
  "discovered_at": "2026-10-12T16:04:00Z",
  "language": "hr",
  "theme": "Povlačenje proizvoda",
  "theme_url": "https://adios.hr/tema/povlacenje-proizvoda"
}

Promjena: polja

PoljeTipZnačenje
idstringID promjene: raste, može imati praznine. Spremite ga kao kursor.
typeenumradar.created, radar.updated, radar.cancelled, radar.removed.
notice_iduuidObavijest na koju se odnosi.
occurred_atdatetimeKad se promjena dogodila.
noticeobject?Trenutačno javno stanje obavijesti (sva polja iznad); izostaje kod radar.removed.

Katalog: polja

GET /api/v1/radar/catalogue daje sve što filtar ili polje može biti, s brojem javnih obavijesti, i sve fiksne vrijednosti sa značenjem.

PoljeTipZnačenje
notices, latest_published_atint, datetimeJavne obavijesti u arhivi i zadnja objava.
trackers[]object[]key, name, description, url, notices, latest_published_at.
sources[]object[]key, tracker, name, publisher, publisher_short_name, publisher_url, language, checking_enabled, check_interval_minutes, last_checked_at, last_success_at, notices.
categories[], hazards[]object[]tracker, key, name, slug, url, concerns_children, notices.
stores[]object[]name, slug, notices (samo trgovine s javnim obavijestima).
enumsobjectSve fiksne vrijednosti: risk, notice_type, company_role, change_type, webhook_event, image_kind, language, sort; svaka kao { value, name, description }.

Vrijednosti (enums)

Fiksne vrijednosti polja i filtara. Iste su u katalogu (enums), uz naziv na traženom jeziku.

Razina rizika risk

VrijednostNazivZnačenje
seriousOzbiljan rizikPatogene bakterije (listerija, salmonela, STEC), neprijavljen glavni alergen, staklo ili metal, otrovna tvar, gušenje djece, strujni udar ili požar.
highVisok rizikDruga kontaminacija s navedenim rizikom za zdravlje: aflatoksini, etilen oksid, pesticidi iznad granice, plijesan.
mediumSrednji rizikNeodobreni aditivi ili sastojci, prekoračene granice bez akutnog rizika.
lowNizak rizikSamo označavanje ili kakvoća.
unknownRizik nije navedenObavijest ne navodi razlog.

Vrsta obavijesti notice_type

VrijednostNazivZnačenje
recallOpozivKupce se traži da proizvod vrate ili ga ne koriste.
withdrawalPovlačenjeProizvod je samo povučen s polica.
warningUpozorenjeJavno upozorenje o proizvodu.
updateDopunaDodaje serije ili proizvode ranijoj obavijesti ili je ispravlja (earlier_notice_id).
cancellationPovučena obavijestRanija obavijest je povučena, obično jer je proizvod siguran. Nije opoziv proizvoda.
otherObavijestSve ostalo, npr. granično odbijanje (RASFF).

Uloga tvrtke companies[].role

VrijednostNazivZnačenje
producerProizvođačProizvodi ili pakira proizvod.
importerUvoznikUvozi proizvod u zemlju.
distributorDistributerVeleprodaja i distribucija.
retailerMaloprodajaTrgovina koja je prodavala proizvod.
otherTvrtkaDruga uloga ili nije navedena.

Vrsta promjene changes[].type

VrijednostNazivZnačenje
radar.createdNova obavijestObavijest je objavljena na Radaru.
radar.updatedIzmjenaPromijenio se tekst, proizvod, serija, trgovina ili druga javna vrijednost.
radar.cancelledPovučenaObavijest je povučena (cancelled=true); proizvod nije nužno siguran.
radar.removedUklonjenaObavijest više nije javna; šalje se samo notice_id, bez sadržaja.

Webhook pretplata event

VrijednostNazivZnačenje
radar.changeObavijestiSvaka promjena obavijesti (radar.created, radar.updated, radar.cancelled, radar.removed). Filtri: tracker, category, hazard, store, gtin.
radar.articleČlanci o opozivimaNovi članak s portala označen kao opoziv proizvoda. Filtar: provider.

Vrsta slike images[].kind

VrijednostNazivZnačenje
productProizvodFotografija proizvoda ili pakiranja.
labelEtiketaEtiketa, serija ili rok trajanja izbliza.
documentDokumentSkenirana obavijest ili tablica.

Jezik lang

VrijednostNazivZnačenje
hrHrvatskiGlavni tekst na hrvatskom.
enEngleskiGlavni tekst na engleskom; ako prijevoda nema, language kaže koji je stigao.

Redoslijed sort

VrijednostNazivZnačenje
newestNajnovijePo datumu objave izvora, najnovije prvo (zadano).
oldestNajstarijePo datumu objave, najstarije prvo.
updatedZadnje izmijenjenePo zadnjoj izmjeni, najnovije prvo.

Radari, izvori, kategorije, opasnosti i trgovine

Uživo iz kataloga (osvježava se svakih 10 minuta). Ključevi su vrijednosti filtara tracker, source, category, hazard i store.

FiltarKljučNazivObavijesti
trackerproduct-recallsOpozivi proizvoda870
sourceadios-urednistvoAdios uredništvo0
sourcehapih-obavijestiHAPIH – obavijesti za potrošače736
sourceeu-rasffRASFF – EU upozorenja o hrani106
sourceeu-safety-gateSafety Gate – EU upozorenja o proizvodima28
categorybaby-foodHrana za bebe · za djecu19
categorybaby-productsOprema za bebe · za djecu1
categorytoysIgračke i dječji proizvodi · za djecu3
categoryfoodHrana650
categorydrinksPića22
categorysupplementsDodaci prehrani37
categorypet-foodHrana za životinje49
categorycosmeticsKozmetika i higijena0
categorykitchenwarePosuđe i ambalaža za hranu64
categoryhouseholdKućanstvo i kemikalije0
categoryelectricalElektrični uređaji1
categoryvehiclesVozila i oprema23
categoryclothingOdjeća i obuća1
categorymedicalLijekovi i medicinski proizvodi0
categoryotherOstalo0
hazardmicrobialMikrobiološka kontaminacija215
hazardallergenNedeklarirani alergeni78
hazardforeign-bodyStrano tijelo74
hazardchemicalKemijska kontaminacija376
hazardunauthorisedNeodobreni sastojci48
hazardquality-labellingKvaliteta i označavanje20
hazardchokingGušenje i sitni dijelovi7
hazardinjuryOzljede20
hazardelectrical-fireStrujni udar ili požar5
hazardotherOstalo27
storemullerMüller49
storesparSpar40
storelidlLidl35
storekonzumKonzum27
storekauflandKaufland23
storemetroMetro22
storetediTEDi16
storedmdm14
storeplodinePlodine14
storeeurospinEurospin10
storepekinska-patkaPekinska patka10
storedecathlonDecathlon6
storepan-asiaPan Asia6
storebipaBipa5
storentlNTL5
storeikeaIKEA4
storepepcoPepco4
storebosoBoso3
storekikKiK3
storeosmi-kontinentOsmi kontinent3

I još 73 trgovina u katalogu (stores[]).

Cijela arhiva i sinkronizacija

Za vlastitu kopiju svih obavijesti koja ostaje točna:

  1. Uvezite arhivu
    GET /export daje sve obavijesti u jednom odgovoru (ili listajte notices?limit=100 kursorom). Spremite meta.sync_cursor.
  2. Čitajte promjene
    GET /changes?after=SYNC_CURSOR. Upišite obavijest po notice_id, a za radar.removed je obrišite.
  3. Pomaknite kursor
    Tek kad obradite cijelu stranicu, spremite meta.next_cursor i nastavite od njega. Bez promjena ostaje isti.
  4. Ponavljajte ili dodajte webhook
    Provjeravajte svakih nekoliko minuta, ili neka radar.change webhook javi svaku promjenu.
  • Slijed promjena počinje uvođenjem Radar API-ja; starije obavijesti dolaze iz arhive. ID-jevi promjena su stringovi i mogu imati praznine.
  • Promjena nosi trenutačno javno stanje, ne povijesnu verziju: više izmjena iste obavijesti može dati isto stanje.
  • Skrivena ili obrisana obavijest daje samo radar.removed s notice_id.

Webhookovi: događaji

Webhook je vaša HTTPS adresa na koju Adios šalje potpisani POST kad se nešto dogodi. Napravite ga u Radar konzoli ili s Radar ključem (POST /api/v1/radar/webhooks).

PretplataŠto šaljePostavke
radar.changeradar.created, radar.updated, radar.cancelled i radar.removed, s cijelom obaviješću.tracker, category, hazard, store, gtin, lang
radar.articleradar.article: novi članak portala s temom Povlačenje proizvoda.provider

Tijelo isporuke:

POST https://example.com/radar
Content-Type: application/json
Adios-Event: radar.created
Adios-Delivery: radar_1842
Adios-Signature: t=1791797400,v1=5b2e…

{
  "id": "radar_1842",
  "type": "radar.created",
  "created_at": "2026-10-12T09:38:00Z",
  "webhook_id": "9a1d4c2b-3e5f-4a6b-8c7d-0e1f2a3b4c5d",
  "test": false,
  "data": {
    "change": {
      "id": "1842",
      "type": "radar.created",
      "notice_id": "6f1c2a4e-8b3d-4c5e-9a7f-1d2e3f4a5b6c",
      "occurred_at": "2026-10-12T09:37:00Z",
      "notice": {
        "id": "6f1c2a4e-8b3d-4c5e-9a7f-1d2e3f4a5b6c",
        "tracker": "product-recalls",
        "language": "hr",
        "title": "Opoziv: svježi sir Primjer 250 g zbog Listeria monocytogenes",
        "summary": "Mljekara Primjer opoziva svježi sir 250 g, serija L26281, zbog bakterije Listeria monocytogenes.",
        "body": "Hrvatska agencija za poljoprivredu i hranu obavještava potrošače o opozivu proizvoda svježi sir Primjer 250 g …",
        "reason": "U proizvodu je utvrđena Listeria monocytogenes.",
        "advice": "Proizvod ne konzumirati i vratiti ga u prodavaonicu u kojoj je kupljen.",
        "url": "https://adios.hr/radar/opozivi/opoziv-svjezi-sir-primjer-250-g-zbog-listeria-monocytogenes-6f1c2a4e",
        "translations": [
          {
            "language": "en",
            "title": "Recall: Primjer fresh cheese 250 g due to Listeria monocytogenes",
            "summary": "Mljekara Primjer recalls its fresh cheese 250 g, batch L26281, due to Listeria monocytogenes.",
            "body": "The Croatian Agency for Agriculture and Food informs consumers of the recall of Primjer fresh cheese 250 g …",
            "reason": "Listeria monocytogenes was found in the product.",
            "advice": "Do not eat the product; return it to the shop where it was bought.",
            "url": "https://adios.hr/en/radar/recalls/recall-primjer-fresh-cheese-250-g-due-to-listeria-monocytogenes-6f1c2a4e"
          },
          {
            "language": "hr",
            "title": "Opoziv: svježi sir Primjer 250 g zbog Listeria monocytogenes",
            "summary": "Mljekara Primjer opoziva svježi sir 250 g, serija L26281, zbog bakterije Listeria monocytogenes.",
            "body": "Hrvatska agencija za poljoprivredu i hranu obavještava potrošače o opozivu proizvoda svježi sir Primjer 250 g …",
            "reason": "U proizvodu je utvrđena Listeria monocytogenes.",
            "advice": "Proizvod ne konzumirati i vratiti ga u prodavaonicu u kojoj je kupljen.",
            "url": "https://adios.hr/radar/opozivi/opoziv-svjezi-sir-primjer-250-g-zbog-listeria-monocytogenes-6f1c2a4e"
          }
        ],
        "category": {
          "key": "food",
          "name": "Hrana",
          "slug": "hrana",
          "concerns_children": false
        },
        "hazard": {
          "key": "microbial",
          "name": "Mikrobiološka kontaminacija",
          "slug": "mikrobioloska-kontaminacija",
          "concerns_children": false
        },
        "risk": "serious",
        "notice_type": "recall",
        "cancelled": false,
        "brand": "Primjer",
        "origin_country": "HR",
        "issued_by": "Hrvatska agencija za poljoprivredu i hranu",
        "published_at": "2026-10-12T09:30:00Z",
        "detected_at": "2026-10-12T09:37:00Z",
        "updated_at": "2026-10-12T09:39:00Z",
        "source_url": "https://www.hapih.hr/opoziv-svjezi-sir-primjer-250-g/",
        "source": {
          "key": "hapih-obavijesti",
          "name": "HAPIH – obavijesti za potrošače",
          "publisher": "Hrvatska agencija za poljoprivredu i hranu",
          "publisher_short_name": "HAPIH",
          "publisher_url": "https://www.hapih.hr/kategorija/obavijesti-za-potrosace/",
          "language": "hr",
          "checking_enabled": true,
          "check_interval_minutes": 10,
          "last_checked_at": "2026-10-14T09:34:00Z",
          "last_success_at": "2026-10-14T09:34:00Z"
        },
        "image_url": "https://www.hapih.hr/wp-content/uploads/2026/10/svjezi-sir-primjer.jpg",
        "images": [
          {
            "url": "https://www.hapih.hr/wp-content/uploads/2026/10/svjezi-sir-primjer.jpg",
            "alt_text": "Svježi sir Primjer, prednja strana",
            "kind": "product"
          }
        ],
        "products": [
          {
            "name": "Svježi sir 250 g",
            "brand": "Primjer",
            "variant": "250 g",
            "gtin": "3850000000017",
            "lots": [
              "L26281",
              "L26282"
            ],
            "best_before": "20.10.2026.",
            "best_before_date": "2026-10-20"
          }
        ],
        "companies": [
          {
            "role": "producer",
            "name": "Mljekara Primjer d.o.o.",
            "address": "Primjerska 1, 10000 Zagreb",
            "country_code": "HR"
          }
        ],
        "stores": [
          {
            "name": "Trgovina Primjer",
            "slug": "trgovina-primjer"
          }
        ],
        "update_ids": [],
        "editorial": false
      }
    }
  }
}

radar.article isporuka ima data.article (polja članka), a test=true i ID koji počinje s test_.

Provjera potpisa

Svaka isporuka je potpisana tajnom webhooka (vidi konzolu): v1 je HMAC-SHA256 od "{t}.{tijelo}", nad izvornim bajtovima tijela. Provjerite potpis i da t nije stariji od 5 minuta.

import crypto from "node:crypto";

function verify(secret, header, rawBody) {
  const parts = Object.fromEntries(header.split(",").map(p => p.split("=")));
  if (Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) return false;
  const expected = crypto.createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1 ?? ""));
}

Isporuka i ponavljanje

  • Odgovorite s 2xx u 10 sekundi, nakon što ste događaj sigurno spremili; obradu nastavite u svom redu.
  • Isporuka je najmanje jednom: duplikati su mogući, prepoznajte ih po id-u (isti je u zaglavlju Adios-Delivery).
  • Neuspjeh se ponavlja nakon 10, 20, 40… sekundi, najviše sat vremena između pokušaja. Nakon 20 neuspjeha zaredom webhook se pauzira; nastavak u konzoli ponovno šalje istu promjenu, a kasnije čekaju.
  • Red se provjerava svakih 5 sekundi nakon što Radar obradi izvor; izvori se provjeravaju u svojim razmacima (source.check_interval_minutes).
  • Novi webhook kreće od trenutka izrade, bez stare arhive. Napredak preživljava restart; istek paketa zaustavlja isporuke, a obnova nastavlja od spremljene točke.
  • Uklanjanja dolaze svim radar.change webhookovima, samo s ID-jem: stari sadržaj i filtri više ne postoje.
  • Samo javne https:// adrese; preusmjeravanja i privatne mrežne adrese nisu dopuštene.

Test na zahtjev

U Radar konzoli ili s POST /webhooks/{id}/test pošaljete primjer, odabranu javnu obavijest ili članak (po ID-ju), ili vlastiti JSON u data (do 16.000 znakova). Odmah vidite HTTP status vašeg servera, trajanje, grešku i točan poslani payload.

  • Test ide na spremljeni URL s novim test_ ID-jem, test=true i važećim potpisom; radi i dok je webhook pauziran (uz aktivan paket).
  • Odabrana stavka ne mora odgovarati filtrima webhooka. Test ne mijenja kursor, broj neuspjeha ni red čekanja.