Reference

API reference

Version
1.1.0
Base URL
https://api.earlywave.ai/api/v1
Authentication
Authorization: Bearer ew_live_…
MCP server
https://api.earlywave.ai/mcp
OpenAPI
api.earlywave.ai/api/v1/openapi.jsonDownload the JSON

Start with the quickstart; errors, the minute window, the monthly quota and paging are explained in Errors, limits and paging.

On this page

Read your feeds, articles, folders, saved items and monitors, and the trends EarlyWave detects across every source it reads.

Authentication. Send your key in the Authorization header: Authorization: Bearer ew_live_…. Create keys in EarlyWave › Settings › API & MCP. A key carries scopes: rest for this API, mcp for the MCP server.

Rate limit and monthly quota. Two counters per account, shared by every key, REST and MCP together: a fixed one-minute window and a calendar-month quota (UTC). Pro: 60 requests a minute and 10,000 a month; Max: 300 a minute and 50,000 a month. Every response carries X-RateLimit-* (minute) and X-Quota-* (month) headers; over either limit you get 429 with error.type = "rate_limit" and a Retry-After header — error.code says which counter refused: rate_limit_exceeded for the minute, quota_exceeded for the month (it resets on the 1st).

Errors. Always {"error": {"type", "code", "message"}}. type is one of invalid_request (400), authentication (401), permission (403), not_found (404), rate_limit (429), server (500).

Paging. Lists take limit (1–100, default 20) and offset, and answer has_more.

Same data over MCP. Each operation is also an MCP tool (x-mcp-tool) on https://api.earlywave.ai/mcp.

Stories detected across every source EarlyWave reads.

GET/trends

List trends

Stories EarlyWave detects across every source it reads, strongest signal first. Filter by category, stage, the country a story is about, the country of its publishers, reach, or how recently it started.

MCP tool list_trends

Example

curl
curl "https://api.earlywave.ai/api/v1/trends?country=FR&since_hours=24&limit=5" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

queryIn querystringmax 200 charsWords the trend title contains.
categoryIn querystringmax 300 charsComma-separated: ai, tech, business, economy, crypto, cyber, geopolitics, politics, energy, climate, health, science, space, society, sports, cinema, people, music, world.
stageIn querystringmax 100 charsComma-separated: emerging, accelerating, breakout.
countryIn querystringmax 2 charsCountry the story is about, ISO alpha-2 (e.g. "FR").
publisher_countryIn querystringmax 2 charsCountry with at least 2 sources covering it, ISO alpha-2.
reachIn querystringmax 100 charsComma-separated: local, national, international, global.
since_hoursIn queryinteger1–720Only stories that started within this many hours (1–720).
sortIn query"signal" | "recent" | "sources"Default signalsignal (default), recent (last activity) or sources.
limitIn queryinteger1–100Default 20Results per page (1–100, default 20).
offsetIn queryinteger0–5000Default 0Results to skip, for paging (at most 5000).

Response

200 application/json · TrendList

trendsTrend[]
trends[].idinteger
trends[].titlestring
trends[].urlstringThe trend page on earlywave.ai.
trends[].statusstring
trends[].stagestringemerging | accelerating | breakout
trends[].categorystring
trends[].reachstring | nulllocal | national | international | global (null = not computed yet).
trends[].subject_countriesstring[]Countries the story is about (alpha-2).
trends[].publisher_countriesstring[]Countries with at least 2 publishing sources (alpha-2).
trends[].item_countintegerArticles.
trends[].source_countintegerDistinct sources (domains).
trends[].signal_scorenumber
trends[].velocity_1hnumberArticles in the last hour.
trends[].velocity_24hnumberArticles in the last 24 hours.
trends[].started_atdate-timeStory start: earliest trusted article.
trends[].earliest_item_atdate-time | null
trends[].first_seen_atdate-timeWhen EarlyWave grouped the story.
trends[].last_activity_atdate-time
totalinteger
limitintegerPage size used.
offsetintegerResults skipped.
has_morebooleanTrue when another page exists (call again with offset + limit).

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.
GET/trends/{trend_id}

Get a trend

A trend with its summary, countries, languages, entities, keywords and its 10 latest articles.

MCP tool get_trend

Example

curl
curl "https://api.earlywave.ai/api/v1/trends/48213" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

trend_idrequiredIn pathinteger> 0Trend ID.

Response

200 application/json · TrendDetail

idinteger
titlestring
urlstringThe trend page on earlywave.ai.
statusstring
stagestringemerging | accelerating | breakout
categorystring
reachstring | nulllocal | national | international | global (null = not computed yet).
subject_countriesstring[]Countries the story is about (alpha-2).
publisher_countriesstring[]Countries with at least 2 publishing sources (alpha-2).
item_countintegerArticles.
source_countintegerDistinct sources (domains).
signal_scorenumber
velocity_1hnumberArticles in the last hour.
velocity_24hnumberArticles in the last 24 hours.
started_atdate-timeStory start: earliest trusted article.
earliest_item_atdate-time | null
first_seen_atdate-timeWhen EarlyWave grouped the story.
last_activity_atdate-time
summarystring | null
regionsstring[]
publisher_languagesstring[]
top_entitiesany
top_keywordsany
sourcesobject[]The 10 most recently attached articles; all of them: /trends/{trend_id}/articles.
sources[].idinteger
sources[].titlestring
sources[].urlstring
sources[].publisheddate-time | null

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 404Not found (or not yours).
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.
GET/trends/{trend_id}/articles

List a trend's articles

Every article of a trend with its source (title, site, country), newest or oldest first.

MCP tool get_trend_articles

Example

curl
curl "https://api.earlywave.ai/api/v1/trends/48213/articles?sort=oldest&limit=5" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

trend_idrequiredIn pathinteger> 0Trend ID.
sortIn query"latest" | "oldest"Default latestlatest (default) or oldest first.
limitIn queryinteger1–100Default 20Results per page (1–100, default 20).
offsetIn queryinteger0–5000Default 0Results to skip, for paging (at most 5000).

Response

200 application/json · TrendArticleList

trend_idinteger
articlesTrendArticle[]
articles[].idinteger
articles[].titlestring
articles[].urlstring
articles[].previewstringSummary or description, up to 500 characters.
articles[].image_urlstring | null
articles[].authorstring | null
articles[].publisheddate-time | null
articles[].feed_idinteger
articles[].languagestring | null
articles[].sourceobject
totalinteger
limitintegerPage size used.
offsetintegerResults skipped.
has_morebooleanTrue when another page exists (call again with offset + limit).

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 404Not found (or not yours).
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.
GET/trends/{trend_id}/coverage

Get where a trend is covered

Publisher countries and languages of a trend (sources = distinct sites) and its last 7 days hour by hour.

MCP tool get_trend_coverage

Example

curl
curl "https://api.earlywave.ai/api/v1/trends/48213/coverage" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

trend_idrequiredIn pathinteger> 0Trend ID.

Response

200 application/json · TrendCoverage

trend_idinteger
total_articlesinteger
total_sourcesinteger
first_article_atdate-time | null
peak_atdate-time | null
countriesobject[]Every publisher country, most sources first.
countries[].countrystringPublisher country, alpha-2.
countries[].sourcesinteger
countries[].articlesinteger
countries[].first_article_atdate-time
countries[].peak_hourdate-time
languagesobject[]
languages[].languagestring
languages[].sourcesinteger
languages[].articlesinteger
seriesobjectThe last 7 days, hour by hour (168 buckets).
series.startdate-timeStart of the first hourly bucket.
series.step_minutesinteger
series.articlesinteger[]
series.sourcesinteger[]Distinct sources publishing in the hour.
series.new_sourcesinteger[]Sources seen for the first time in the story in the hour.

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 404Not found (or not yours).
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.

Monitors

Your monitors and what they found.

GET/monitors

List your monitors

Your monitors (archived ones excluded), with their counts and next check.

MCP tool list_monitors

Example

curl
curl "https://api.earlywave.ai/api/v1/monitors" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

No parameters.

Response

200 application/json · MonitorList

monitorsMonitor[]
monitors[].idstring
monitors[].namestring
monitors[].formstring
monitors[].statusstring
monitors[].iconstring | null
monitors[].results_countinteger
monitors[].articles_countinteger
monitors[].last_check_atdate-time | null
monitors[].next_check_atdate-time | null
monitors[].last_result_atdate-time | null
monitors[].created_atdate-time
monitors[].updated_atdate-time
monitors[].conversation_refstring | null
monitors[].cadenceany
monitors[].delivery_modestring
monitors[].calm_sincedate-time | null
totalinteger

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.
GET/monitors/{monitor_id}/results

Get a monitor's results

What a monitor found over the last days (newest first), with its sources and the current answers to its questions.

MCP tool get_monitor_results

Example

curl
curl "https://api.earlywave.ai/api/v1/monitors/0b7c6a52-4c1e-4e0b-9a51-2f8d3c1e7a90/results?days=7" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

monitor_idrequiredIn pathstringmax 64 charsMonitor ID (from list_monitors / GET /monitors).
daysIn queryinteger1–90Default 30Period in days (1–90, default 30).
queryIn querystringmax 120 charsOnly results containing this text.
limitIn queryinteger1–100Default 20Results per page (1–100, default 20).

Response

200 application/json · MonitorResults

monitorMonitor
monitor.idstring
monitor.namestring
monitor.formstring
monitor.statusstring
monitor.iconstring | null
monitor.results_countinteger
monitor.articles_countinteger
monitor.last_check_atdate-time | null
monitor.next_check_atdate-time | null
monitor.last_result_atdate-time | null
monitor.created_atdate-time
monitor.updated_atdate-time
monitor.conversation_refstring | null
monitor.cadenceany
monitor.delivery_modestring
monitor.calm_sincedate-time | null
period_daysinteger
totalinteger
limitinteger
has_moreboolean
resultsMonitorResult[]
results[].idstring
results[].kindstring
results[].typestring | null
results[].titlestring
results[].summarystring | null
results[].event_datedate-time | null
results[].fieldsmap
results[].confidencenumber | null
results[].cluster_idinteger | null
results[].sources_countinteger
results[].first_seen_atdate-time
results[].updated_atdate-time
results[].hidden_atdate-time | null
results[].feedbackstring | null
results[].sourcesobject[]
answersobject[]
answers[].questionstring
answers[].answerstring | null
answers[].changed_atdate-time | null

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 404Not found (or not yours).
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.

Feeds

Your subscriptions and the feed catalogue.

GET/feeds

List your subscribed feeds

Lists the RSS feeds the account is subscribed to, optionally filtered by a keyword (title, description, address) or a domain.

MCP tool find_feeds

Example

curl
curl "https://api.earlywave.ai/api/v1/feeds?domain=lemonde.fr" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

queryIn querystringmax 500 charsKeyword matched against title, description and feed address.
domainIn querystringmax 200 charsDomain the feed address contains, e.g. "lemonde.fr".
limitIn queryinteger1–100Default 20Results per page (1–100, default 20).
offsetIn queryinteger0–5000Default 0Results to skip, for paging (at most 5000).

Response

200 application/json · FeedList

feedsFeed[]
feeds[].idinteger
feeds[].titlestring
feeds[].feed_urlstring
feeds[].website_urlstring | null
feeds[].descriptionstring
feeds[].languagestring | null
feeds[].countrystring | nullPublisher country, ISO 3166-1 alpha-2.
feeds[].subscribersinteger | null
feeds[].items_countinteger | null
feeds[].latest_fetchdate-time | null
totalinteger
limitintegerPage size used.
offsetintegerResults skipped.
has_morebooleanTrue when another page exists (call again with offset + limit).

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.
GET/feeds/discover

Search the feed catalogue

Searches every feed EarlyWave reads (not only your subscriptions), most-followed first.

MCP tool discover_feeds

Example

curl
curl "https://api.earlywave.ai/api/v1/feeds/discover?query=climate&country=FR" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

queryrequiredIn querystringmax 500 charsKeyword (at least 2 characters) matched against the title, the description and the publisher's domain.
languageIn querystringmax 10 charsFeed language code, e.g. "fr".
countryIn querystringmax 3 charsPublisher country, ISO alpha-2 ("FR") or alpha-3 ("FRA").
limitIn queryinteger1–100Default 20Results per page (1–100, default 20).
offsetIn queryinteger0–5000Default 0Results to skip, for paging (at most 5000).

Response

200 application/json · FeedDiscoveryList

querystring
feedsFeed[]
feeds[].idinteger
feeds[].titlestring
feeds[].feed_urlstring
feeds[].website_urlstring | null
feeds[].descriptionstring
feeds[].languagestring | null
feeds[].countrystring | nullPublisher country, ISO 3166-1 alpha-2.
feeds[].subscribersinteger | null
feeds[].items_countinteger | null
feeds[].latest_fetchdate-time | null
limitintegerPage size used.
offsetintegerResults skipped.
has_morebooleanTrue when another page exists (call again with offset + limit).

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.
GET/feeds/{feed_id}

Get one of your feeds

Details of a feed you are subscribed to, with its 24-hour and 7-day article counts.

MCP tool get_feed

Example

curl
curl "https://api.earlywave.ai/api/v1/feeds/1207" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

feed_idrequiredIn pathinteger> 0Feed ID.

Response

200 application/json · FeedDetail

idinteger
titlestring
feed_urlstring
website_urlstring | null
descriptionstring
languagestring | null
countrystring | nullPublisher country, ISO 3166-1 alpha-2.
subscribersinteger | null
items_countinteger | null
latest_fetchdate-time | null
feed_brokenboolean
items_count_24hinteger | null
items_count_7dinteger | null

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 404Not found (or not yours).
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.
GET/feeds/{feed_id}/items

List a feed's articles

Articles of one of your feeds, newest first.

MCP tool get_feed_items

Example

curl
curl "https://api.earlywave.ai/api/v1/feeds/1207/items" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

feed_idrequiredIn pathinteger> 0Feed ID.
limitIn queryinteger1–100Default 20Results per page (1–100, default 20).
offsetIn queryinteger0–5000Default 0Results to skip, for paging (at most 5000).

Response

200 application/json · FeedItemList

feed_idinteger
itemsArticleSummary[]
items[].idinteger
items[].titlestring
items[].urlstring
items[].previewstringSummary or description, up to 500 characters.
items[].image_urlstring | null
items[].authorstring | null
items[].publisheddate-time | null
items[].feed_idinteger
limitintegerPage size used.
offsetintegerResults skipped.
has_morebooleanTrue when another page exists (call again with offset + limit).

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 404Not found (or not yours).
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.

Folders

Your feed folders and their articles.

GET/categories

List your folders

Your feed folders, with the number of feeds in each.

MCP tool list_categories

Example

curl
curl "https://api.earlywave.ai/api/v1/categories" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

No parameters.

Response

200 application/json · FolderList

categoriesFolder[]
categories[].idinteger
categories[].namestring
categories[].feed_countinteger
categories[].is_frozenboolean
totalinteger

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.
GET/categories/{category_id}/items

List a folder's articles

Articles from the feeds of one of your folders, newest first.

MCP tool get_category_items

Example

curl
curl "https://api.earlywave.ai/api/v1/categories/12/items" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

category_idrequiredIn pathinteger> 0Folder ID.
limitIn queryinteger1–100Default 20Results per page (1–100, default 20).
offsetIn queryinteger0–5000Default 0Results to skip, for paging (at most 5000).

Response

200 application/json · FolderItemList

categoryobject
category.idinteger
category.namestring
itemsArticleSummary[]
items[].idinteger
items[].titlestring
items[].urlstring
items[].previewstringSummary or description, up to 500 characters.
items[].image_urlstring | null
items[].authorstring | null
items[].publisheddate-time | null
items[].feed_idinteger
totalinteger
limitintegerPage size used.
offsetintegerResults skipped.
has_morebooleanTrue when another page exists (call again with offset + limit).

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 404Not found (or not yours).
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.
GET/items

List all your articles

Articles from all your feeds, newest first.

MCP tool get_all_items

Example

curl
curl "https://api.earlywave.ai/api/v1/items" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

limitIn queryinteger1–100Default 20Results per page (1–100, default 20).
offsetIn queryinteger0–5000Default 0Results to skip, for paging (at most 5000).

Response

200 application/json · ItemList

itemsArticleSummary[]
items[].idinteger
items[].titlestring
items[].urlstring
items[].previewstringSummary or description, up to 500 characters.
items[].image_urlstring | null
items[].authorstring | null
items[].publisheddate-time | null
items[].feed_idinteger
totalinteger
limitintegerPage size used.
offsetintegerResults skipped.
has_morebooleanTrue when another page exists (call again with offset + limit).

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.

Articles

Articles of your feeds.

GET/articles/search

Search your articles

Articles of your feeds whose title, description, summary or keywords contain the query, newest first.

MCP tool search_articles

Example

curl
curl "https://api.earlywave.ai/api/v1/articles/search?query=election" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

queryrequiredIn querystringmax 500 charsText to search for.
limitIn queryinteger1–100Default 20Results per page (1–100, default 20).
offsetIn queryinteger0–5000Default 0Results to skip, for paging (at most 5000).

Response

200 application/json · ArticleSearchList

querystring
articlesArticleSummary[]
articles[].idinteger
articles[].titlestring
articles[].urlstring
articles[].previewstringSummary or description, up to 500 characters.
articles[].image_urlstring | null
articles[].authorstring | null
articles[].publisheddate-time | null
articles[].feed_idinteger
limitintegerPage size used.
offsetintegerResults skipped.
has_morebooleanTrue when another page exists (call again with offset + limit).

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.
GET/articles/{article_id}

Get an article

One article from your feeds, with its text (up to 10,000 characters), summary and keywords.

MCP tool get_article

Example

curl
curl "https://api.earlywave.ai/api/v1/articles/9917305" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

article_idrequiredIn pathinteger> 0Article ID.

Response

200 application/json · Article

idinteger
titlestring
urlstring
previewstring
contentstringArticle text, up to 10,000 characters.
keywordsstring | null
image_urlstring | null
authorstring | null
languagestring | null
publisheddate-time | null
feed_idinteger

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 404Not found (or not yours).
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.

Saved

Articles, pages and searches you saved.

GET/saved

List your saved items

Articles, pages and searches you saved, newest first.

MCP tool list_saved

Example

curl
curl "https://api.earlywave.ai/api/v1/saved?type=article" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

typeIn query"article" | "url" | "search"article, url or search; all when omitted.
limitIn queryinteger1–100Default 20Results per page (1–100, default 20).
offsetIn queryinteger0–5000Default 0Results to skip, for paging (at most 5000).

Response

200 application/json · SavedList

typestring
savedSavedEntry[]
saved[].type"article" | "url" | "search"
saved[].idinteger
saved[].source_idinteger | null
saved[].titlestring
saved[].urlstring | null
saved[].previewstring
saved[].saved_atdate-time
limitintegerPage size used.
offsetintegerResults skipped.
has_morebooleanTrue when another page exists (call again with offset + limit).

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.

Discover

Recent articles and keywords across every source.

GET/discover

Search all recent articles

Recent articles from every source EarlyWave reads (not only your feeds), by keywords or latest first.

MCP tool discover_items

Example

curl
curl "https://api.earlywave.ai/api/v1/discover?query=chips,export&hours_back=24" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

queryIn querystringmax 500 charsComma-separated keywords; latest articles when omitted.
languageIn querystringmax 10 charsArticle language code, e.g. "en".
hours_backIn queryinteger1–168Default 24Look-back window in hours (1–168, default 24).
limitIn queryinteger1–100Default 20Results per page (1–100, default 20).
offsetIn queryinteger0–5000Default 0Results to skip, for paging (at most 5000).

Response

200 application/json · DiscoverItemList

querystring | null
languagestring | null
hours_backinteger
itemsDiscoverItem[]
items[].idinteger
items[].titlestring
items[].urlstring | null
items[].previewstring
items[].image_urlstring | null
items[].authorstring | null
items[].languagestring | null
items[].publisheddate-time | null
items[].feedobject | null
items[].match_sourcestring | nullWhere the query matched (keywords, title, description); null without a query.
totalinteger
limitintegerPage size used.
offsetintegerResults skipped.
has_morebooleanTrue when another page exists (call again with offset + limit).

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.
GET/discover/keywords

Top keywords

The most frequent keywords, entities, themes or places in recent articles.

MCP tool discover_top_keywords

Example

curl
curl "https://api.earlywave.ai/api/v1/discover/keywords?type=entities" \
  -H "Authorization: Bearer $EARLYWAVE_API_KEY"

Parameters

typeIn query"main_keywords" | "entities" | "themes" | "locations" | "all"Default allmain_keywords, entities, themes, locations or all (default).
hours_backIn queryinteger1–168Default 24Look-back window in hours (1–168, default 24).
limitIn queryinteger1–100Default 20Results per page (1–100, default 20).

Response

200 application/json · KeywordList

hours_backinteger
typestring
keywordsobject[]
keywords[].keywordstring
keywords[].countinteger
keywords[].typesstring[]
totalinteger

Errors

  • 400Invalid parameters.
  • 401Missing, unknown or revoked key.
  • 403The key lacks the rest scope, or the account does not include API access.
  • 429Rate limit exceeded (rate_limit_exceeded, the minute window) or monthly quota exceeded (quota_exceeded, resets on the 1st); Retry-After says when.