Skip to content
Adios Developers
Adios API 1.0

Documentation

The Adios API gives the news of every major Croatian portal as data: the latest and biggest stories, search by meaning, everything connected to a question, news around any place, the map, timelines, daily summaries, trending topics and product recalls.

Base URLhttps://adios.hr/api/v1
FormatJSON (UTF-8), snake_case names, UTC times (ISO 8601)
OpenAPI/api/v1/openapi.json (Postman, code generators, GPT actions)
MCPhttps://adios.hr/api/mcp · guide
CORSAllowed from any origin (a key, not a cookie, says who calls).

Quickstart

  1. Make a key
    Sign in to Adios and open the console. Your first key is made at once; it is shown only once.
  2. Call the API
    export ADIOS_KEY="adios_…"
    curl "https://adios.hr/api/v1/articles?sort=most_covered&limit=5" -H "Authorization: Bearer $ADIOS_KEY"
  3. Read data
    Every answer is {"data": …, "meta": …}; data is an object or a list, meta tells how many items and what the plan limited.

For AI agents you don't even need a key: the MCP at /api/mcp works right away.

Authentication

Send the key in a header, either way:

Authorization: Bearer adios_AbC123…
X-Api-Key: adios_AbC123…
  • A key is "adios_" and 40 letters and digits. We keep only its hash (SHA-256), so it can't be shown again: revoke a lost key and make a new one.
  • Up to 10 active keys per account (e.g. one for production, one for testing). A revoked key stops working at once.
  • Don't put a key in public page or app code: call the API from your server.
  • Only the MCP also takes the key in the address (/api/mcp?key=adios_…), as ChatGPT and Claude can't set a header.

Limits

Each plan has a per-minute and a per-day limit, and the costlier calls (search, connected, places) have their own daily limit too. The day starts at 00:00 UTC.

Group What Free MCP without key (per session)
per minuteall calls6020
per dayall calls5,000300
search/v1/search50040
connected/v1/connected20020
geo/v1/nearby, /v1/map, /v1/cities, /v1/places1,00080
webhookswebhook deliveries500–
radius/v1/nearby50 km50 km
archivedays back3030
limititems per call5020

Every answer carries the state in headers:

X-RateLimit-Limit: 5000          # daily limit
X-RateLimit-Remaining: 4987      # left today
X-RateLimit-Reset: 1760227200    # when the count resets (Unix)
X-RateLimit-Minute: 60
X-RateLimit-Group: geo           # for the costlier calls
X-RateLimit-Group-Limit: 1000
X-RateLimit-Group-Remaining: 992

When a limit is reached the answer is 429 with a Retry-After header (seconds). If you ask beyond the plan (a bigger radius, more items, further back), you get what the plan allows and meta says so (e.g. radius_limited_to).

Responses

{
  "data": [ … ],
  "meta": {
    "count": 20,
    "limit": 20,
    "plan": "free",
    "took_ms": 41
  }
}
  • Lists have limit and offset (stories: page). Empty fields are left out.
  • url is the page on Adios (summary, every portal, the map); source.url is the article on the portal.
  • Every list (search, connected, nearby, city, map and stories too) leaves out filler: horoscopes, quizzes, reality shows, celebrity gossip and promos. include_filler=true brings it back in any call.

Errors

{ "error": { "code": "invalid_parameter", "message": "'lat' must be a number between -90 and 90.", "docs": "https://adios.hr/developers/docs#errors" } }
HTTPcodeMeaning
400missing_parameter, invalid_parameter, invalid_body, invalid_urlA parameter is missing or wrong; the message says which.
401key_required, invalid_keyNo key, or a wrong or revoked one.
403account_suspended, history_limit, webhook_limit, radius_limitThe account is suspended or the request is beyond the plan.
404article_not_found, place_not_found, city_not_found, digest_not_found, story_not_found, webhook_not_found, unknown_endpointNot there.
429rate_limited, too_many_wrong_keysA limit is reached; see Retry-After.
500internal_errorOur error; it's logged. Try again.
503unavailableThe API is resting (maintenance).

News

Latest news

MCP: get_latest_news
GET/api/v1/articles

The latest news of all portals, or by category, portal and period. The same news from several portals comes once.

ParameterTypeDescription
category string Category: crime, politics, sport… (see /v1/categories).
provider string Only one portal, by its slug (see /v1/providers).
from string From (YYYY-MM-DD or ISO time), within the plan's archive.
to string To (YYYY-MM-DD or ISO time).
sort string newest (default), most_read or most_covered (most portals).
newest · most_read · most_covered
stories_only boolean Only news that is part of a followed story (timeline).
include_filler boolean Filler (horoscopes, quizzes, reality shows, celebrity gossip, promos) is left out of every list; true brings it back.
limit integer How many results (default 20, at most what the plan allows).
offset integer Skip this many (paging).
curl "https://adios.hr/api/v1/articles?category=crime&limit=5" \
  -H "Authorization: Bearer $ADIOS_KEY"

Article

MCP: get_article
GET/api/v1/articles/{id}

Everything about one article: Adios's short summary and context, topics and people, the same news on other portals, related articles, where it happened and the story (timeline) it belongs to.

ParameterTypeDescription
id required string · path The article's id (from a list or a search).
curl "https://adios.hr/api/v1/articles/{id}" \
  -H "Authorization: Bearer $ADIOS_KEY"

Everything connected

connected MCP: research_topic
GET/api/v1/connected

Ask anything and get everything connected: articles, followed stories with their stages, where it happened, the daily summaries that covered it and one timeline of it all.

ParameterTypeDescription
q required string What you want to know: a person, a place, an event, a topic.
days integer How many days back (default 30, at most the plan's archive).
include_filler boolean Filler (horoscopes, quizzes, reality shows, celebrity gossip, promos) is left out of every list; true brings it back.
limit integer How many results (default 15, at most what the plan allows).
curl "https://adios.hr/api/v1/connected?q=cijene%20goriva" \
  -H "Authorization: Bearer $ADIOS_KEY"

Places and the map

News nearby

geo MCP: get_nearby_news
GET/api/v1/nearby

News around a place or a point: everything within N km, with the distance, the kind (fire, crash, crime…) and every portal's report.

ParameterTypeDescription
place string A place in Croatia, however written: "Zadar", "u Zadru", "Dugo Selo", "otok Krk".
lat number Latitude (instead of a place).
lon number Longitude.
radius_km number Radius in km (default 25, at most what the plan allows).
hours integer How many hours back (default 24, at most 720).
kinds array Kinds of map stories, e.g. fire,crash,crime (see /v1/categories).
urgent_only boolean Only what matters: fires, crashes, explosions, earthquakes, floods, storms, rescues, missing people and big stories.
include_filler boolean Filler (horoscopes, quizzes, reality shows, celebrity gossip, promos) is left out of every list; true brings it back.
sort string distance (default), newest or importance.
distance · newest · importance
limit integer How many results (default 20, at most what the plan allows).
curl "https://adios.hr/api/v1/nearby?place=Zadar&radius_km=50&hours=48" \
  -H "Authorization: Bearer $ADIOS_KEY"

Resolve a place

geo MCP: resolve_place
GET/api/v1/places/resolve

A place name to a point (or a point to the nearest town), from the list of all Croatian places.

ParameterTypeDescription
name string The place's name in any grammatical case.
lat number Or a point: latitude…
lon number …and longitude.
curl "https://adios.hr/api/v1/places/resolve?name=Dugom%20Selu" \
  -H "Authorization: Bearer $ADIOS_KEY"

Cities

geo
GET/api/v1/cities

The cities with their own news page and how many stories each had in the last 30 days.

curl "https://adios.hr/api/v1/cities" \
  -H "Authorization: Bearer $ADIOS_KEY"

A city's news

geo MCP: get_city_news
GET/api/v1/cities/{slug}

A city's and its surroundings' news of the last 30 days (each story on the page of the city it is nearest to).

ParameterTypeDescription
slug required string · path The city: zadar, split, slavonski-brod… or its name.
kinds array Kinds of map stories, e.g. fire,crash,crime (see /v1/categories).
include_filler boolean Filler (horoscopes, quizzes, reality shows, celebrity gossip, promos) is left out of every list; true brings it back.
limit integer How many results (default 30, at most what the plan allows).
curl "https://adios.hr/api/v1/cities/zadar" \
  -H "Authorization: Bearer $ADIOS_KEY"

News map

geo MCP: get_news_map
GET/api/v1/map

Every story with a location in the last N hours (Croatia and the world), newest first.

ParameterTypeDescription
hours integer How many hours back (default 24, at most 720).
kinds array Kinds of map stories, e.g. fire,crash,crime (see /v1/categories).
urgent_only boolean Only what matters: fires, crashes, explosions, earthquakes, floods, storms, rescues, missing people and big stories.
include_filler boolean Filler (horoscopes, quizzes, reality shows, celebrity gossip, promos) is left out of every list; true brings it back.
limit integer How many results (default 100, at most what the plan allows).
curl "https://adios.hr/api/v1/map?hours=6&urgent_only=true" \
  -H "Authorization: Bearer $ADIOS_KEY"

Summaries

Daily summary

MCP: get_daily_digest
GET/api/v1/digests/daily

Adios's summary of the day: what happened, by section, with a timeline and links to the stories. Today's is written live.

ParameterTypeDescription
date string The day (YYYY-MM-DD, today, yesterday); default the newest.
croatia_only boolean Croatia only: without the world section and its stories, as "Samo Hrvatska" on adios.hr (default: all news).
curl "https://adios.hr/api/v1/digests/daily?date=yesterday" \
  -H "Authorization: Bearer $ADIOS_KEY"

Weekly summary

MCP: get_weekly_digest
GET/api/v1/digests/weekly

The week's summary (Monday to Sunday): the week's most important stories.

ParameterTypeDescription
date string Any day of the week (YYYY-MM-DD); default the newest.
croatia_only boolean Croatia only: without the world section and its stories, as "Samo Hrvatska" on adios.hr (default: all news).
curl "https://adios.hr/api/v1/digests/weekly" \
  -H "Authorization: Bearer $ADIOS_KEY"

Monthly summary

GET/api/v1/digests/monthly

The month's summary: the month's most important stories.

ParameterTypeDescription
date string Any day of the month (YYYY-MM-DD); default the newest.
croatia_only boolean Croatia only: without the world section and its stories, as "Samo Hrvatska" on adios.hr (default: all news).
curl "https://adios.hr/api/v1/digests/monthly" \
  -H "Authorization: Bearer $ADIOS_KEY"

List of summaries

GET/api/v1/digests

The newest summaries of one kind (titles and links).

ParameterTypeDescription
kind string daily (default), weekly or monthly.
daily · weekly · monthly
limit integer How many results (default 14, at most what the plan allows).
curl "https://adios.hr/api/v1/digests?kind=weekly&limit=4" \
  -H "Authorization: Bearer $ADIOS_KEY"

Stories (timelines)

Stories

MCP: list_stories
GET/api/v1/stories

Followed stories (timelines of several stages): newest development first, or the longest, or the most reported.

ParameterTypeDescription
q string Search the stories' and stages' names.
category string Category: crime, politics, sport… (see /v1/categories).
period string A new stage within: day, week or month.
day · week · month
order string latest (default), longest or most_reports.
latest · longest · most_reports
page integer Page (20 per page).
include_filler boolean Filler (horoscopes, quizzes, reality shows, celebrity gossip, promos) is left out of every list; true brings it back.
curl "https://adios.hr/api/v1/stories?period=week" \
  -H "Authorization: Bearer $ADIOS_KEY"

Story timeline

MCP: get_story_timeline
GET/api/v1/stories/{slug}

A story's whole timeline: every stage with its name, time, summary and the portals' reports, and where it happened.

ParameterTypeDescription
slug required string · path The story's slug (from /v1/stories or its /kronologija/… address).
curl "https://adios.hr/api/v1/stories/{slug}" \
  -H "Authorization: Bearer $ADIOS_KEY"

More

Product recalls

MCP: get_product_recalls
GET/api/v1/recalls

Adios Radar: product recalls and safety warnings (HAPIH, EU RASFF, Safety Gate), in Croatian or English.

ParameterTypeDescription
q string Search: product, brand, store, hazard.
lang string hr (default) or en.
hr · en
limit integer How many results (default 10, at most what the plan allows).
curl "https://adios.hr/api/v1/recalls?lang=en&limit=5" \
  -H "Authorization: Bearer $ADIOS_KEY"

Portals

MCP: list_portals
GET/api/v1/providers

The portals Adios reads, with the slug to filter by.

curl "https://adios.hr/api/v1/providers" \
  -H "Authorization: Bearer $ADIOS_KEY"

Categories and kinds

MCP: list_categories
GET/api/v1/categories

The articles' categories and the map stories' kinds (Croatian and English names).

curl "https://adios.hr/api/v1/categories" \
  -H "Authorization: Bearer $ADIOS_KEY"

Account

My usage

MCP: get_my_usage
GET/api/v1/me

Your plan, its limits and today's use by group.

curl "https://adios.hr/api/v1/me" \
  -H "Authorization: Bearer $ADIOS_KEY"

Webhooks

My webhooks

key only
GET/api/v1/webhooks

Your webhooks with their event, settings and last delivery.

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

Create a webhook

key only
POST/api/v1/webhooks

Adios POSTs to your address when it happens: news near a place (nearby.story), a new recall (recall.new), the day's summary (digest.daily) or a new stage of a followed story (story.stage). JSON body.

ParameterTypeDescription
name required string · body A name (for you).
url required string · body Your HTTPS address.
event required string · body nearby.story, recall.new, digest.daily or story.stage.
nearby.story · recall.new · digest.daily · story.stage
place string · body nearby.story: a place…
lat number · body …or a point (latitude)…
lon number · body …and longitude.
radius_km number · body nearby.story: the radius (default 25).
kinds array · body nearby.story: only these kinds.
urgent_only boolean · body nearby.story: only what matters.
story string · body story.stage: the story's slug.
lang string · body recall.new: hr or en.
hr · en
curl -X POST "https://adios.hr/api/v1/webhooks" \
  -H "Authorization: Bearer $ADIOS_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Hotel Zadar","url":"https://example.com/adios","event":"nearby.story","place":"Zadar","radius_km":20,"urgent_only":true}'

Delete a webhook

key only
DELETE/api/v1/webhooks/{id}

Deletes a webhook.

ParameterTypeDescription
id required string · path The webhook's id.
curl -X DELETE "https://adios.hr/api/v1/webhooks/{id}" \
  -H "Authorization: Bearer $ADIOS_KEY"

Test delivery

key only
POST/api/v1/webhooks/{id}/test

Sends a test event to the webhook's address (signed like a real one).

ParameterTypeDescription
id required string · path The webhook's id.
curl -X POST "https://adios.hr/api/v1/webhooks/{id}/test" \
  -H "Authorization: Bearer $ADIOS_KEY"

Webhooks: events

A webhook is your HTTPS address Adios POSTs to when something happens, without you asking. Make one in the console or through the API (POST /v1/webhooks).

EventWhenSettings
nearby.story A new story within your radius of a place (a hotel, a campsite, a town): fires, crashes, storms, closed roads, everything on the map. Each story once. place | lat+lon, radius_km, kinds, urgent_only
recall.new A new product recall or safety warning of Adios Radar (HAPIH, EU RASFF, Safety Gate). lang (hr|en)
digest.daily The day's summary once the day is over (a little after midnight, Croatian time). –
story.stage A new stage of a followed story (its timeline), e.g. a missing person found. story (slug)

The delivery's body:

POST https://example.com/adios
Content-Type: application/json
Adios-Event: nearby.story
Adios-Delivery: nearby_3f2c…
Adios-Signature: t=1760180000,v1=5b2e…

{
  "id": "nearby_3f2c…",
  "type": "nearby.story",
  "created_at": "2026-10-11T18:04:00Z",
  "webhook_id": "9a1d…",
  "test": false,
  "data": {
    "place": "Zadar",
    "story": { "title": "…", "kind": "fire", "place": "Bibinje", "distance_km": 6.2, "url": "https://adios.hr/…", … }
  }
}

Verifying signatures

Every delivery is signed with your webhook's secret (see the console): v1 is HMAC-SHA256 of "{t}.{body}". Check the signature, and that t is no older than 5 minutes.

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 ?? ""));
}

Delivery and retries

  • Answer 2xx within 10 seconds. Anything else is a failure.
  • A failed delivery is retried less and less often (1, 2, 4… up to 60 minutes); after 20 failures in a row the webhook is switched off, and you switch it back on in the console.
  • Each event comes once (its id is stable, so duplicates are easy to spot). A new webhook starts from when it was made, with no old events.
  • Adios checks for news every minute. The console's "Test" button sends a real example right away.
  • Addresses must be https:// on the public internet.

MCP

Adios is an MCP server too (Model Context Protocol, Streamable HTTP). Every endpoint above marked MCP is also a tool, plus search and fetch (for ChatGPT connectors and deep research) and ready prompts (morning briefing, local news, explain a story, recalls).

MCPhttps://adios.hr/api/mcp

Without a key it works for everyone (limits per session); with a key (a header or ?key=) your plan's limits apply and the calls are in your log.

How to connect ChatGPT, Claude, Cursor…

Changelog

1.0 · 11 October 2026 · First version: news, search, everything connected, news nearby, the map, cities, summaries, timelines, trending topics, recalls, webhooks and an MCP for everyone.

Changes that could break your code are announced in advance; new fields in answers may come at any time.