API
Get headlines from a news API by country
Query headlines, article URLs, images, and summaries by country and section. Subscribe to Neper News API on RapidAPI or JoJ API.

What this guide covers
Query headlines, article URLs, images, and summaries by country and section. Subscribe to Neper News API on RapidAPI or JoJ API.
- Request: country and section
- Response shape
- RapidAPI
- JoJ API
- Errors
- Choosing a marketplace
Neper collects news by country and section. That same data is available as Neper News API, so an app can request headlines, article URLs, images, and summaries without scraping each source itself.
There is one endpoint, /queryNews. You call it through either marketplace below. The request shape is the same; only the host and auth headers change.
The Neper guide hub keeps the current API guide and future Neper documentation in one place.
Subscribe on the marketplace you already use, then call
/queryNewswith that marketplace’s key.
1. Request: country and section
Both GET and POST are supported.
- country (required):
en,ko,au,nz,it,ja,gb,fr,de, orin - section (optional): omit it to receive every section for that country
Common section values: top, BUSINESS, ENTERTAINMENT, SPORTS, WORLD, HEALTH.
Science and technology use different ids by country:
it,ko,ja,fr,de→SCITECHen,au,nz,gb,in→SCIENCEorTECHNOLOGY
TOP is treated as top. On GET, multiple sections look like BUSINESS,SPORTS. On POST, you can send a string, a comma-separated string, or a JSON array.
Examples:
GET /queryNews?country=en
GET /queryNews?country=ko§ion=top
GET /queryNews?country=ko§ion=SCITECH
{ "country": "gb", "section": ["SPORTS", "BUSINESS"] }
News documents refresh about every five minutes. updatedAt is a Unix timestamp in milliseconds.
2. Response shape
A successful response looks like this:
{
"status": "success",
"message": "Request successful",
"data": {
"country": "ko",
"sections": ["top"],
"count": 1,
"items": [
{
"docId": "kotop",
"code": "ko",
"id": "top",
"updatedAt": 1757116800000,
"news": [
{
"title": { "_text": "Headline" },
"link": { "_text": "https://news.google.com/rss" },
"url": "https://example.com/article",
"img": "https://example.com/image.jpg",
"content": "Article body",
"summary": "One-sentence summary",
"section": "top"
}
]
}
]
}
}
A few details that are easy to miss:
- If you omit
section,data.sectionsis an empty array and every section for that country comes back. titleandlinkmay be objects with a_textfield. Read_textbefore showing them in a UI.- Articles can also include fields such as
descriptionandfaviconUrl. - AI
summaryis filled forde,en, andko. Other countries return an empty string. Even in supported countries,summarycan be empty when the source page had no usable article body.
3. RapidAPI
- Open the RapidAPI listing and subscribe to a plan.
- Copy your RapidAPI key from the dashboard.
- Call the RapidAPI host. Keep the key in headers only — not in the URL or JSON body.
https://neper-news-api.p.rapidapi.com
X-RapidAPI-Key: <YOUR_KEY>
X-RapidAPI-Host: neper-news-api.p.rapidapi.com
curl -G 'https://neper-news-api.p.rapidapi.com/queryNews' \
--data-urlencode 'country=ko' \
--data-urlencode 'section=top' \
-H 'X-RapidAPI-Key: <YOUR_KEY>' \
-H 'X-RapidAPI-Host: neper-news-api.p.rapidapi.com'
import axios from 'axios'
const res = await axios.get('https://neper-news-api.p.rapidapi.com/queryNews', {
params: { country: 'ko', section: 'top' },
headers: {
'X-RapidAPI-Key': '<YOUR_KEY>',
'X-RapidAPI-Host': 'neper-news-api.p.rapidapi.com'
}
})
console.log(res.data)
const res = await axios.post(
'https://neper-news-api.p.rapidapi.com/queryNews',
{ country: 'en', section: ['top', 'BUSINESS'] },
{
headers: {
'X-RapidAPI-Key': '<YOUR_KEY>',
'X-RapidAPI-Host': 'neper-news-api.p.rapidapi.com'
}
}
)
4. JoJ API
- Open the JoJ API listing and subscribe to a plan.
- Create or copy a JoJ API key.
- Call the JoJ host for this API. The gateway checks the key and strips it before forwarding the request.
https://neper-news-api.jojapi.net
Preferred header:
X-JoJAPI-Key: <YOUR_KEY>
These also work:
Authorization: Bearer <YOUR_KEY>
Authorization: <YOUR_KEY>
curl -G 'https://neper-news-api.jojapi.net/queryNews' \
--data-urlencode 'country=ko' \
--data-urlencode 'section=top' \
-H 'X-JoJAPI-Key: <YOUR_KEY>'
import axios from 'axios'
const res = await axios.get('https://neper-news-api.jojapi.net/queryNews', {
params: { country: 'ko', section: 'top' },
headers: {
'X-JoJAPI-Key': '<YOUR_KEY>'
}
})
console.log(res.data)
const res = await axios.post(
'https://neper-news-api.jojapi.net/queryNews',
{ country: 'en', section: ['top', 'BUSINESS'] },
{
headers: {
'X-JoJAPI-Key': '<YOUR_KEY>'
}
}
)
On JoJ API, billing is tied to the Request API object. One successful call counts as one unit, even when section is omitted and every section comes back. Exact monthly quotas and rate limits are on the listing’s pricing page. HTTP 5xx responses and gateway-generated errors do not consume quota.
5. Errors
| Status | What it usually means |
|---|---|
| 400 | Invalid or missing country / section. errorCode is INVALID_REQUEST, and allowed values are in message. |
| 401 | Key missing or invalid, or no active subscription |
| 402 | JoJ API billing issue: quota used up, object not in the plan, or wallet balance too low |
| 429 | Rate limit or quota exceeded |
| 5xx | Temporary server problem |
JoJ API responses created by the gateway include X-Jojapi-Gateway-Response: true.
A common 400 cause is mixing science section ids: use SCITECH with ko, not SCIENCE; use SCIENCE or TECHNOLOGY with en, not SCITECH.
6. Choosing a marketplace
/queryNews behaves the same on both sides. Use RapidAPI if that is already where your keys and billing live. Use JoJ API if you want one JoJ key and wallet across several marketplace APIs.
Store keys outside source control. If you only need Neper traffic on JoJ API, restrict the key to this API.
Need another region, or stuck on an integration? Contact [email protected].