Référence
Référence de l’API
- Version
1.1.0- URL de base
https://api.earlywave.ai/api/v1- Authentification
Authorization: Bearer ew_live_…- Serveur MCP
https://api.earlywave.ai/mcp- OpenAPI
- api.earlywave.ai/api/v1/openapi.jsonTélécharger le JSON
Commencez par le démarrage rapide ; erreurs, fenêtre d’une minute, quota mensuel et pagination sont expliqués dans Errors, limits and paging.
Sur cette page
- Trends
- List trends
- Get a trend
- List a trend's articles
- Get where a trend is covered
- Monitors
- List your monitors
- Get a monitor's results
- Feeds
- List your subscribed feeds
- Search the feed catalogue
- Get one of your feeds
- List a feed's articles
- Folders
- List your folders
- List a folder's articles
- List all your articles
- Articles
- Search your articles
- Get an article
- Saved
- List your saved items
- Discover
- Search all recent articles
- Top keywords
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.
Trends
Stories detected across every source EarlyWave reads.
/trendsList 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.
Outil MCP list_trends
Exemple
curl "https://api.earlywave.ai/api/v1/trends?country=FR&since_hours=24&limit=5" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
query | Où query | stringmax 200 chars | — | Words the trend title contains. |
category | Où query | stringmax 300 chars | — | Comma-separated: ai, tech, business, economy, crypto, cyber, geopolitics, politics, energy, climate, health, science, space, society, sports, cinema, people, music, world. |
stage | Où query | stringmax 100 chars | — | Comma-separated: emerging, accelerating, breakout. |
country | Où query | stringmax 2 chars | — | Country the story is about, ISO alpha-2 (e.g. "FR"). |
publisher_country | Où query | stringmax 2 chars | — | Country with at least 2 sources covering it, ISO alpha-2. |
reach | Où query | stringmax 100 chars | — | Comma-separated: local, national, international, global. |
since_hours | Où query | integer1–720 | — | Only stories that started within this many hours (1–720). |
sort | Où query | "signal" | "recent" | "sources" | Défaut signal | signal (default), recent (last activity) or sources. |
limit | Où query | integer1–100 | Défaut 20 | Results per page (1–100, default 20). |
offset | Où query | integer0–5000 | Défaut 0 | Results to skip, for paging (at most 5000). |
Réponse
200 application/json · TrendList
| Champ | Type | Description |
|---|---|---|
trends | Trend[] | — |
trends[].id | integer | — |
trends[].title | string | — |
trends[].url | string | The trend page on earlywave.ai. |
trends[].status | string | — |
trends[].stage | string | emerging | accelerating | breakout |
trends[].category | string | — |
trends[].reach | string | null | local | national | international | global (null = not computed yet). |
trends[].subject_countries | string[] | Countries the story is about (alpha-2). |
trends[].publisher_countries | string[] | Countries with at least 2 publishing sources (alpha-2). |
trends[].item_count | integer | Articles. |
trends[].source_count | integer | Distinct sources (domains). |
trends[].signal_score | number | — |
trends[].velocity_1h | number | Articles in the last hour. |
trends[].velocity_24h | number | Articles in the last 24 hours. |
trends[].started_at | date-time | Story start: earliest trusted article. |
trends[].earliest_item_at | date-time | null | — |
trends[].first_seen_at | date-time | When EarlyWave grouped the story. |
trends[].last_activity_at | date-time | — |
total | integer | — |
limit | integer | Page size used. |
offset | integer | Results skipped. |
has_more | boolean | True when another page exists (call again with offset + limit). |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
/trends/{trend_id}Get a trend
A trend with its summary, countries, languages, entities, keywords and its 10 latest articles.
Outil MCP get_trend
Exemple
curl "https://api.earlywave.ai/api/v1/trends/48213" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
trend_idrequis | Où path | integer> 0 | — | Trend ID. |
Réponse
200 application/json · TrendDetail
| Champ | Type | Description |
|---|---|---|
id | integer | — |
title | string | — |
url | string | The trend page on earlywave.ai. |
status | string | — |
stage | string | emerging | accelerating | breakout |
category | string | — |
reach | string | null | local | national | international | global (null = not computed yet). |
subject_countries | string[] | Countries the story is about (alpha-2). |
publisher_countries | string[] | Countries with at least 2 publishing sources (alpha-2). |
item_count | integer | Articles. |
source_count | integer | Distinct sources (domains). |
signal_score | number | — |
velocity_1h | number | Articles in the last hour. |
velocity_24h | number | Articles in the last 24 hours. |
started_at | date-time | Story start: earliest trusted article. |
earliest_item_at | date-time | null | — |
first_seen_at | date-time | When EarlyWave grouped the story. |
last_activity_at | date-time | — |
summary | string | null | — |
regions | string[] | — |
publisher_languages | string[] | — |
top_entities | any | — |
top_keywords | any | — |
sources | object[] | The 10 most recently attached articles; all of them: /trends/{trend_id}/articles. |
sources[].id | integer | — |
sources[].title | string | — |
sources[].url | string | — |
sources[].published | date-time | null | — |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
/trends/{trend_id}/articlesList a trend's articles
Every article of a trend with its source (title, site, country), newest or oldest first.
Outil MCP get_trend_articles
Exemple
curl "https://api.earlywave.ai/api/v1/trends/48213/articles?sort=oldest&limit=5" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
trend_idrequis | Où path | integer> 0 | — | Trend ID. |
sort | Où query | "latest" | "oldest" | Défaut latest | latest (default) or oldest first. |
limit | Où query | integer1–100 | Défaut 20 | Results per page (1–100, default 20). |
offset | Où query | integer0–5000 | Défaut 0 | Results to skip, for paging (at most 5000). |
Réponse
200 application/json · TrendArticleList
| Champ | Type | Description |
|---|---|---|
trend_id | integer | — |
articles | TrendArticle[] | — |
articles[].id | integer | — |
articles[].title | string | — |
articles[].url | string | — |
articles[].preview | string | Summary or description, up to 500 characters. |
articles[].image_url | string | null | — |
articles[].author | string | null | — |
articles[].published | date-time | null | — |
articles[].feed_id | integer | — |
articles[].language | string | null | — |
articles[].source | object | — |
total | integer | — |
limit | integer | Page size used. |
offset | integer | Results skipped. |
has_more | boolean | True when another page exists (call again with offset + limit). |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
/trends/{trend_id}/coverageGet where a trend is covered
Publisher countries and languages of a trend (sources = distinct sites) and its last 7 days hour by hour.
Outil MCP get_trend_coverage
Exemple
curl "https://api.earlywave.ai/api/v1/trends/48213/coverage" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
trend_idrequis | Où path | integer> 0 | — | Trend ID. |
Réponse
200 application/json · TrendCoverage
| Champ | Type | Description |
|---|---|---|
trend_id | integer | — |
total_articles | integer | — |
total_sources | integer | — |
first_article_at | date-time | null | — |
peak_at | date-time | null | — |
countries | object[] | Every publisher country, most sources first. |
countries[].country | string | Publisher country, alpha-2. |
countries[].sources | integer | — |
countries[].articles | integer | — |
countries[].first_article_at | date-time | — |
countries[].peak_hour | date-time | — |
languages | object[] | — |
languages[].language | string | — |
languages[].sources | integer | — |
languages[].articles | integer | — |
series | object | The last 7 days, hour by hour (168 buckets). |
series.start | date-time | Start of the first hourly bucket. |
series.step_minutes | integer | — |
series.articles | integer[] | — |
series.sources | integer[] | Distinct sources publishing in the hour. |
series.new_sources | integer[] | Sources seen for the first time in the story in the hour. |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
Monitors
Your monitors and what they found.
/monitorsList your monitors
Your monitors (archived ones excluded), with their counts and next check.
Outil MCP list_monitors
Exemple
curl "https://api.earlywave.ai/api/v1/monitors" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
Aucun paramètre.
Réponse
200 application/json · MonitorList
| Champ | Type | Description |
|---|---|---|
monitors | Monitor[] | — |
monitors[].id | string | — |
monitors[].name | string | — |
monitors[].form | string | — |
monitors[].status | string | — |
monitors[].icon | string | null | — |
monitors[].results_count | integer | — |
monitors[].articles_count | integer | — |
monitors[].last_check_at | date-time | null | — |
monitors[].next_check_at | date-time | null | — |
monitors[].last_result_at | date-time | null | — |
monitors[].created_at | date-time | — |
monitors[].updated_at | date-time | — |
monitors[].conversation_ref | string | null | — |
monitors[].cadence | any | — |
monitors[].delivery_mode | string | — |
monitors[].calm_since | date-time | null | — |
total | integer | — |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
/monitors/{monitor_id}/resultsGet a monitor's results
What a monitor found over the last days (newest first), with its sources and the current answers to its questions.
Outil MCP get_monitor_results
Exemple
curl "https://api.earlywave.ai/api/v1/monitors/0b7c6a52-4c1e-4e0b-9a51-2f8d3c1e7a90/results?days=7" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
monitor_idrequis | Où path | stringmax 64 chars | — | Monitor ID (from list_monitors / GET /monitors). |
days | Où query | integer1–90 | Défaut 30 | Period in days (1–90, default 30). |
query | Où query | stringmax 120 chars | — | Only results containing this text. |
limit | Où query | integer1–100 | Défaut 20 | Results per page (1–100, default 20). |
Réponse
200 application/json · MonitorResults
| Champ | Type | Description |
|---|---|---|
monitor | Monitor | — |
monitor.id | string | — |
monitor.name | string | — |
monitor.form | string | — |
monitor.status | string | — |
monitor.icon | string | null | — |
monitor.results_count | integer | — |
monitor.articles_count | integer | — |
monitor.last_check_at | date-time | null | — |
monitor.next_check_at | date-time | null | — |
monitor.last_result_at | date-time | null | — |
monitor.created_at | date-time | — |
monitor.updated_at | date-time | — |
monitor.conversation_ref | string | null | — |
monitor.cadence | any | — |
monitor.delivery_mode | string | — |
monitor.calm_since | date-time | null | — |
period_days | integer | — |
total | integer | — |
limit | integer | — |
has_more | boolean | — |
results | MonitorResult[] | — |
results[].id | string | — |
results[].kind | string | — |
results[].type | string | null | — |
results[].title | string | — |
results[].summary | string | null | — |
results[].event_date | date-time | null | — |
results[].fields | map | — |
results[].confidence | number | null | — |
results[].cluster_id | integer | null | — |
results[].sources_count | integer | — |
results[].first_seen_at | date-time | — |
results[].updated_at | date-time | — |
results[].hidden_at | date-time | null | — |
results[].feedback | string | null | — |
results[].sources | object[] | — |
answers | object[] | — |
answers[].question | string | — |
answers[].answer | string | null | — |
answers[].changed_at | date-time | null | — |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
Feeds
Your subscriptions and the feed catalogue.
/feedsList your subscribed feeds
Lists the RSS feeds the account is subscribed to, optionally filtered by a keyword (title, description, address) or a domain.
Outil MCP find_feeds
Exemple
curl "https://api.earlywave.ai/api/v1/feeds?domain=lemonde.fr" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
query | Où query | stringmax 500 chars | — | Keyword matched against title, description and feed address. |
domain | Où query | stringmax 200 chars | — | Domain the feed address contains, e.g. "lemonde.fr". |
limit | Où query | integer1–100 | Défaut 20 | Results per page (1–100, default 20). |
offset | Où query | integer0–5000 | Défaut 0 | Results to skip, for paging (at most 5000). |
Réponse
200 application/json · FeedList
| Champ | Type | Description |
|---|---|---|
feeds | Feed[] | — |
feeds[].id | integer | — |
feeds[].title | string | — |
feeds[].feed_url | string | — |
feeds[].website_url | string | null | — |
feeds[].description | string | — |
feeds[].language | string | null | — |
feeds[].country | string | null | Publisher country, ISO 3166-1 alpha-2. |
feeds[].subscribers | integer | null | — |
feeds[].items_count | integer | null | — |
feeds[].latest_fetch | date-time | null | — |
total | integer | — |
limit | integer | Page size used. |
offset | integer | Results skipped. |
has_more | boolean | True when another page exists (call again with offset + limit). |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
/feeds/discoverSearch the feed catalogue
Searches every feed EarlyWave reads (not only your subscriptions), most-followed first.
Outil MCP discover_feeds
Exemple
curl "https://api.earlywave.ai/api/v1/feeds/discover?query=climate&country=FR" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
queryrequis | Où query | stringmax 500 chars | — | Keyword (at least 2 characters) matched against the title, the description and the publisher's domain. |
language | Où query | stringmax 10 chars | — | Feed language code, e.g. "fr". |
country | Où query | stringmax 3 chars | — | Publisher country, ISO alpha-2 ("FR") or alpha-3 ("FRA"). |
limit | Où query | integer1–100 | Défaut 20 | Results per page (1–100, default 20). |
offset | Où query | integer0–5000 | Défaut 0 | Results to skip, for paging (at most 5000). |
Réponse
200 application/json · FeedDiscoveryList
| Champ | Type | Description |
|---|---|---|
query | string | — |
feeds | Feed[] | — |
feeds[].id | integer | — |
feeds[].title | string | — |
feeds[].feed_url | string | — |
feeds[].website_url | string | null | — |
feeds[].description | string | — |
feeds[].language | string | null | — |
feeds[].country | string | null | Publisher country, ISO 3166-1 alpha-2. |
feeds[].subscribers | integer | null | — |
feeds[].items_count | integer | null | — |
feeds[].latest_fetch | date-time | null | — |
limit | integer | Page size used. |
offset | integer | Results skipped. |
has_more | boolean | True when another page exists (call again with offset + limit). |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
/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.
Outil MCP get_feed
Exemple
curl "https://api.earlywave.ai/api/v1/feeds/1207" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
feed_idrequis | Où path | integer> 0 | — | Feed ID. |
Réponse
200 application/json · FeedDetail
| Champ | Type | Description |
|---|---|---|
id | integer | — |
title | string | — |
feed_url | string | — |
website_url | string | null | — |
description | string | — |
language | string | null | — |
country | string | null | Publisher country, ISO 3166-1 alpha-2. |
subscribers | integer | null | — |
items_count | integer | null | — |
latest_fetch | date-time | null | — |
feed_broken | boolean | — |
items_count_24h | integer | null | — |
items_count_7d | integer | null | — |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
/feeds/{feed_id}/itemsList a feed's articles
Articles of one of your feeds, newest first.
Outil MCP get_feed_items
Exemple
curl "https://api.earlywave.ai/api/v1/feeds/1207/items" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
feed_idrequis | Où path | integer> 0 | — | Feed ID. |
limit | Où query | integer1–100 | Défaut 20 | Results per page (1–100, default 20). |
offset | Où query | integer0–5000 | Défaut 0 | Results to skip, for paging (at most 5000). |
Réponse
200 application/json · FeedItemList
| Champ | Type | Description |
|---|---|---|
feed_id | integer | — |
items | ArticleSummary[] | — |
items[].id | integer | — |
items[].title | string | — |
items[].url | string | — |
items[].preview | string | Summary or description, up to 500 characters. |
items[].image_url | string | null | — |
items[].author | string | null | — |
items[].published | date-time | null | — |
items[].feed_id | integer | — |
limit | integer | Page size used. |
offset | integer | Results skipped. |
has_more | boolean | True when another page exists (call again with offset + limit). |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
Folders
Your feed folders and their articles.
/categoriesList your folders
Your feed folders, with the number of feeds in each.
Outil MCP list_categories
Exemple
curl "https://api.earlywave.ai/api/v1/categories" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
Aucun paramètre.
Réponse
200 application/json · FolderList
| Champ | Type | Description |
|---|---|---|
categories | Folder[] | — |
categories[].id | integer | — |
categories[].name | string | — |
categories[].feed_count | integer | — |
categories[].is_frozen | boolean | — |
total | integer | — |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
/categories/{category_id}/itemsList a folder's articles
Articles from the feeds of one of your folders, newest first.
Outil MCP get_category_items
Exemple
curl "https://api.earlywave.ai/api/v1/categories/12/items" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
category_idrequis | Où path | integer> 0 | — | Folder ID. |
limit | Où query | integer1–100 | Défaut 20 | Results per page (1–100, default 20). |
offset | Où query | integer0–5000 | Défaut 0 | Results to skip, for paging (at most 5000). |
Réponse
200 application/json · FolderItemList
| Champ | Type | Description |
|---|---|---|
category | object | — |
category.id | integer | — |
category.name | string | — |
items | ArticleSummary[] | — |
items[].id | integer | — |
items[].title | string | — |
items[].url | string | — |
items[].preview | string | Summary or description, up to 500 characters. |
items[].image_url | string | null | — |
items[].author | string | null | — |
items[].published | date-time | null | — |
items[].feed_id | integer | — |
total | integer | — |
limit | integer | Page size used. |
offset | integer | Results skipped. |
has_more | boolean | True when another page exists (call again with offset + limit). |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
/itemsList all your articles
Articles from all your feeds, newest first.
Outil MCP get_all_items
Exemple
curl "https://api.earlywave.ai/api/v1/items" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
limit | Où query | integer1–100 | Défaut 20 | Results per page (1–100, default 20). |
offset | Où query | integer0–5000 | Défaut 0 | Results to skip, for paging (at most 5000). |
Réponse
200 application/json · ItemList
| Champ | Type | Description |
|---|---|---|
items | ArticleSummary[] | — |
items[].id | integer | — |
items[].title | string | — |
items[].url | string | — |
items[].preview | string | Summary or description, up to 500 characters. |
items[].image_url | string | null | — |
items[].author | string | null | — |
items[].published | date-time | null | — |
items[].feed_id | integer | — |
total | integer | — |
limit | integer | Page size used. |
offset | integer | Results skipped. |
has_more | boolean | True when another page exists (call again with offset + limit). |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
Articles
Articles of your feeds.
/articles/searchSearch your articles
Articles of your feeds whose title, description, summary or keywords contain the query, newest first.
Outil MCP search_articles
Exemple
curl "https://api.earlywave.ai/api/v1/articles/search?query=election" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
queryrequis | Où query | stringmax 500 chars | — | Text to search for. |
limit | Où query | integer1–100 | Défaut 20 | Results per page (1–100, default 20). |
offset | Où query | integer0–5000 | Défaut 0 | Results to skip, for paging (at most 5000). |
Réponse
200 application/json · ArticleSearchList
| Champ | Type | Description |
|---|---|---|
query | string | — |
articles | ArticleSummary[] | — |
articles[].id | integer | — |
articles[].title | string | — |
articles[].url | string | — |
articles[].preview | string | Summary or description, up to 500 characters. |
articles[].image_url | string | null | — |
articles[].author | string | null | — |
articles[].published | date-time | null | — |
articles[].feed_id | integer | — |
limit | integer | Page size used. |
offset | integer | Results skipped. |
has_more | boolean | True when another page exists (call again with offset + limit). |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
/articles/{article_id}Get an article
One article from your feeds, with its text (up to 10,000 characters), summary and keywords.
Outil MCP get_article
Exemple
curl "https://api.earlywave.ai/api/v1/articles/9917305" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
article_idrequis | Où path | integer> 0 | — | Article ID. |
Réponse
200 application/json · Article
| Champ | Type | Description |
|---|---|---|
id | integer | — |
title | string | — |
url | string | — |
preview | string | — |
content | string | Article text, up to 10,000 characters. |
keywords | string | null | — |
image_url | string | null | — |
author | string | null | — |
language | string | null | — |
published | date-time | null | — |
feed_id | integer | — |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
Saved
Articles, pages and searches you saved.
/savedList your saved items
Articles, pages and searches you saved, newest first.
Outil MCP list_saved
Exemple
curl "https://api.earlywave.ai/api/v1/saved?type=article" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
type | Où query | "article" | "url" | "search" | — | article, url or search; all when omitted. |
limit | Où query | integer1–100 | Défaut 20 | Results per page (1–100, default 20). |
offset | Où query | integer0–5000 | Défaut 0 | Results to skip, for paging (at most 5000). |
Réponse
200 application/json · SavedList
| Champ | Type | Description |
|---|---|---|
type | string | — |
saved | SavedEntry[] | — |
saved[].type | "article" | "url" | "search" | — |
saved[].id | integer | — |
saved[].source_id | integer | null | — |
saved[].title | string | — |
saved[].url | string | null | — |
saved[].preview | string | — |
saved[].saved_at | date-time | — |
limit | integer | Page size used. |
offset | integer | Results skipped. |
has_more | boolean | True when another page exists (call again with offset + limit). |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
Discover
Recent articles and keywords across every source.
/discoverSearch all recent articles
Recent articles from every source EarlyWave reads (not only your feeds), by keywords or latest first.
Outil MCP discover_items
Exemple
curl "https://api.earlywave.ai/api/v1/discover?query=chips,export&hours_back=24" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
query | Où query | stringmax 500 chars | — | Comma-separated keywords; latest articles when omitted. |
language | Où query | stringmax 10 chars | — | Article language code, e.g. "en". |
hours_back | Où query | integer1–168 | Défaut 24 | Look-back window in hours (1–168, default 24). |
limit | Où query | integer1–100 | Défaut 20 | Results per page (1–100, default 20). |
offset | Où query | integer0–5000 | Défaut 0 | Results to skip, for paging (at most 5000). |
Réponse
200 application/json · DiscoverItemList
| Champ | Type | Description |
|---|---|---|
query | string | null | — |
language | string | null | — |
hours_back | integer | — |
items | DiscoverItem[] | — |
items[].id | integer | — |
items[].title | string | — |
items[].url | string | null | — |
items[].preview | string | — |
items[].image_url | string | null | — |
items[].author | string | null | — |
items[].language | string | null | — |
items[].published | date-time | null | — |
items[].feed | object | null | — |
items[].match_source | string | null | Where the query matched (keywords, title, description); null without a query. |
total | integer | — |
limit | integer | Page size used. |
offset | integer | Results skipped. |
has_more | boolean | True when another page exists (call again with offset + limit). |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.
/discover/keywordsTop keywords
The most frequent keywords, entities, themes or places in recent articles.
Outil MCP discover_top_keywords
Exemple
curl "https://api.earlywave.ai/api/v1/discover/keywords?type=entities" \
-H "Authorization: Bearer $EARLYWAVE_API_KEY"Paramètres
| Nom | Où | Type | Défaut | Description |
|---|---|---|---|---|
type | Où query | "main_keywords" | "entities" | "themes" | "locations" | "all" | Défaut all | main_keywords, entities, themes, locations or all (default). |
hours_back | Où query | integer1–168 | Défaut 24 | Look-back window in hours (1–168, default 24). |
limit | Où query | integer1–100 | Défaut 20 | Results per page (1–100, default 20). |
Réponse
200 application/json · KeywordList
| Champ | Type | Description |
|---|---|---|
hours_back | integer | — |
type | string | — |
keywords | object[] | — |
keywords[].keyword | string | — |
keywords[].count | integer | — |
keywords[].types | string[] | — |
total | integer | — |
Erreurs
400Invalid parameters.401Missing, unknown or revoked key.403The key lacks therestscope, 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-Aftersays when.