Developers
A public JSON feed of today’s Nepali news.
One endpoint. No auth. CORS-enabled. Returns the same set of clustered stories the homepage renders — with bilingual headlines, English and Nepali summaries, and a canonical link back to the K cha khabar story page where the original sources are listed. Suitable for agents, dashboards, embeds, research, and class projects.
Last updated: May 17, 2026 · API version v1
Quick start
Hit the endpoint with any HTTP client. There’s nothing to sign up for.
Endpoint
GET https://kchakhabar.com/api/v1/today.jsoncurl
curl -sS https://kchakhabar.com/api/v1/today.json | jq .JavaScript (browser or Node 18+)
const res = await fetch('https://kchakhabar.com/api/v1/today.json')
const { generated_at, story_count, stories } = await res.json()
console.log(`${story_count} stories as of ${generated_at}`)Response shape
A single JSON object. The stories array contains up to 24 items, ranked by coverage breadth and recency — newest, most-covered stories first.
Example response (truncated)
{
"generated_at": "2026-05-16T08:00:00.000Z",
"story_count": 24,
"stories": [
{
"id": "25789",
"slug": "sixty-year-old-grandmother-passes-see-exam-bhaktapur",
"url": "https://kchakhabar.com/story/2026/05/15/sixty-year-old-grandmother-passes-see-exam-bhaktapur?utm_source=kchakhabar_api&utm_medium=api&utm_campaign=today_v1",
"topic_en": "Sixty Year Old Grandmother Passes SEE Exam in Bhaktapur",
"topic_ne": "भक्तपुरमा ६० वर्षीया हजुरआमाले गरिन् एसईई उत्तीर्ण",
"summary_en": "Raminkumari Rai, a 60-year-old grandmother, has successfully passed the Secondary Education Examination (SEE) in Bhaktapur. She resumed her studies at Aastha Mahila Vidhyalaya in Gatthaghar after previously leaving school due to family responsibilities. Rai's achievement demonstrates that age is not a barrier to pursuing higher education and fulfilling personal goals.",
"summary_ne": "भक्तपुरकी ६० वर्षीया हजुरआमा रमिनकुमारी राईले यस वर्षको माध्यमिक शिक्षा परीक्षा सफलतापूर्वक उत्तीर्ण गर्नुभएको छ। …",
"source_count": 4,
"first_reported": "2026-05-15T08:30:00.000Z",
"updated_at": "2026-05-16T02:45:26.149Z"
}
]
}Field reference
Top-level object
| Field | Type | Description |
|---|---|---|
| generated_at | string (ISO 8601) | Server timestamp at which this response was rendered. Useful for cache-busting and freshness checks. |
| story_count | integer | Number of stories in the array. Always equal to stories.length. |
| stories | array<Story> | Up to 24 stories, ranked by coverage + decay. May be empty during low-news windows; not an error. |
Story object
| Field | Type | Description |
|---|---|---|
| id | string | Stable opaque identifier. Encoded as a string so JavaScript clients do not lose precision on large integers. |
| slug | string | URL-safe slug used in the public story page path. |
| url | string | Canonical kchakhabar.com URL for this story, with UTM parameters identifying the API as the referrer. The story page lists every original source URL — link there if you need to attribute or follow back to publishers. |
| topic_en | string | Headline-style topic in English. Always present. |
| topic_ne | string | null | Headline-style topic in Nepali. Null if no Nepali headline was generated. |
| summary_en | string | null | 2–3 sentence English summary. Null if only a Nepali summary exists. |
| summary_ne | string | null | 2–3 sentence Nepali summary. Null if only an English summary exists. |
| source_count | integer | Number of original articles backing this story across all tracked publishers. |
| first_reported | string (ISO 8601) | null | Timestamp of the earliest article in the cluster — when this story was first reported by any tracked publisher. Null in the rare case where no article carries a usable timestamp. |
| updated_at | string (ISO 8601) | When the story cluster was last updated (new article joined, summary regenerated, etc.). |
Caching & freshness
The endpoint is served with Cache-Control: public, max-age=300, s-maxage=300, stale-while-revalidate=600. That means:
- Fresh for 5 minutes. Browsers, CDNs, and edge caches may serve the same body for up to 5 minutes after the first miss. The ingest pipeline runs more often than that, so 5 minutes is a good freshness floor for clients.
- Stale-while-revalidate 10 minutes. Past the freshness window, intermediaries may keep serving the cached response while a fresh fetch happens in the background. Plan for response timestamps to lag wall-clock time by up to ~15 minutes during high-traffic windows.
- No published rate limit. Because every response is cacheable, we expect normal traffic to be absorbed by the CDN. Please don’t poll faster than once per minute — you’ll get the same bytes. If you need a webhook or push feed, get in touch.
CORS & access
- No authentication. No API key, no signup, no token. The endpoint is fully public.
- CORS open. The response sets
Access-Control-Allow-Origin: *and answers preflightOPTIONSrequests. Browsers on any origin can call this directly from client-side JavaScript. - HTTPS only in production. The
http://URL redirects.
Versioning & stability
- The path includes a version segment —
/api/v1/…. Any backwards-incompatible change ships under/api/v2/…;v1stays available for a minimum of 90 days after a successor goes live. - New, optional fields may be added to
v1responses without notice. Treat any unfamiliar key as additive. - Existing field names and types are stable. We will not silently change a string to an integer.
Attribution & use
- K cha khabar aggregates headlines from 35+ Nepali newsrooms. Each story’s
urlfield points at our cluster page, which lists every original source — please send readers there so they can pick a publisher and read the full piece on the original site. - You’re welcome to render headlines, summaries, and topic labels in your own UI. If you do, a credit line like “via K cha khabar” linking back to kchakhabar.com is appreciated.
- We add a default UTM tag (
utm_source=kchakhabar_api) to the storyurlfield so traffic from API integrations shows up separately in our analytics. Leave it as-is if you can.
Not in v1
This is intentionally a tiny surface. The following are not exposed in v1 and may or may not arrive later:
- Single-story lookup by id or slug
- Historical or date-ranged queries
- Pagination beyond the top 24
- Per-publisher feeds
- Search, filters, or language scoping
- Write endpoints, webhooks, or push
If one of those would unblock something you’re building, tell us what you need.
Get in touch
Found a bug, want a field added, or building something you’d like to show off? Email [email protected] or check out how the pipeline works for context on where the data comes from.