Noti Group API
Read-only access to the published stories of Noti Group. Free to use with attribution: link to each story's canonical URL and name the publisher (every record has an "attribution" object). Without a key you get summaries, 60 requests a minute. Partners with a key get their own limit and, with the full-text scope, the full text of stories. Ask for a key through the contact page.
Start
Base address: https://noti.group/api/v1. Every answer is JSON. Lists come in pages (page, limit) with meta (total, pages) and links.next.
curl "https://noti.group/api/v1/articles?lang=en§ion=music&limit=5"With a key, send it in the Authorization: Bearer header (or X-API-Key). Never put a key in a web page: it is for your server.
curl -H "Authorization: Bearer clk_..." "https://noti.group/api/v1/articles/STORY-ID"Attribution
Every story record has an attribution object. Show the publisher name and link to attribution.canonicalUrl wherever you use the story. Stories based on another outlet's reporting also name that source in attribution.source; keep that credit too.
Endpoints
GET /articles
Published stories. Newest first by default. Filters combine (AND).
| Parameter | Type | What it does |
|---|---|---|
lang | en, default en | Edition: en. |
section | string | Section key (e.g. music). |
hashtag | string | Hashtag key (e.g. taylor-swift). |
topic | string | Topic key. |
person | string | Person or organization key. |
type | string | Kind of story: news, analysis, opinion, review, interview, video, gallery, breaking, longform, audio, list, live. |
q | string | Full-text search (words, "exact phrase", -exclude). |
since | string | Published at or after (ISO 8601). |
until | string | Published before (ISO 8601). |
sort | -published | published | -updated | -views, default -published | |
page | integer, default 1 | |
limit | integer, default 20, max 50 |
GET /articles/{id}
One published story
| Parameter | Type | What it does |
|---|---|---|
id (required) | string | Permanent id (attribution.id) or the address part of the story URL. |
lang | en, default en | Optional: only in this edition. |
GET /sections
Sections of the edition. Only terms with at least one published story in the edition, most used first.
| Parameter | Type | What it does |
|---|---|---|
lang | en, default en | Edition: en. |
q | string | Only names containing this text. |
page | integer, default 1 | |
limit | integer, default 50, max 100 |
GET /hashtags
Hashtags. Only terms with at least one published story in the edition, most used first.
| Parameter | Type | What it does |
|---|---|---|
lang | en, default en | Edition: en. |
q | string | Only names containing this text. |
page | integer, default 1 | |
limit | integer, default 50, max 100 |
GET /topics
Topics. Only terms with at least one published story in the edition, most used first.
| Parameter | Type | What it does |
|---|---|---|
lang | en, default en | Edition: en. |
q | string | Only names containing this text. |
page | integer, default 1 | |
limit | integer, default 50, max 100 |
GET /people
People and organizations. Only terms with at least one published story in the edition, most used first.
| Parameter | Type | What it does |
|---|---|---|
lang | en, default en | Edition: en. |
q | string | Only names containing this text. |
page | integer, default 1 | |
limit | integer, default 50, max 100 |
GET /authors
Authors. Only terms with at least one published story in the edition, most used first.
| Parameter | Type | What it does |
|---|---|---|
lang | en, default en | Edition: en. |
q | string | Only names containing this text. |
page | integer, default 1 | |
limit | integer, default 50, max 100 |
Story record
| Field | Type | Notes |
|---|---|---|
id | string | Permanent id; stays the same when the headline or address changes. |
url | string | |
language | string | |
type | string | |
title | string | |
summary | string | null | |
published | string | |
updated | string | |
firstPublished | string | |
section | Link | |
hashtags | Link[] | |
topics | Link[] | |
people | Term[] | |
authors | object[] | |
image | object | null | |
wordCount | integer | |
body | object | Only with a key that has the full-text scope. |
attribution | object |
Errors and limits
Errors come as {"error": {"code", "message"}} with status 400 (bad parameter), 401 (bad key), 404 or 429 (too many requests: wait a minute). Answers without a key are cached for a few minutes.
More
- OpenAPI description (for code generators and tools)
- llms.txt, and a Markdown version of every story (story address ending in
.md) - RSS feeds per edition, and widgets for your site
Widgets
Show our latest stories on your site. Change es to en or pt for another edition, or add a section key after it (for example /embed/en/music/).
<iframe src="https://noti.group/embed/es/" title="Noti Group" width="100%" height="420" style="border:0" loading="lazy"></iframe>Keys and questions: contact us.








