Dailyhunt APIm.dailyhunt.in ↗
Fetch Dailyhunt news categories, paginated story feeds, and full article text across 15 Indian languages via 3 structured endpoints.
What is the Dailyhunt API?
The Dailyhunt API exposes 3 endpoints to browse news categories, retrieve paginated story feeds, and fetch full article content from m.dailyhunt.in across 15 Indian languages. Use list_categories to enumerate topic slugs and IDs for a given language edition, then pass those IDs to get_category_news for a cursor-paginated feed of the latest stories, each carrying a title, summary, format, and image URL.
curl -X GET 'https://api.parse.bot/scraper/7075e725-a240-44af-bc47-08f03a2bcff7/list_categories?language=en' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace m-dailyhunt-in-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Dailyhunt News SDK — browse categories, read stories, fetch full articles."""
from parse_apis.m_dailyhunt_in_api import Dailyhunt, Language, InputNotFound
client = Dailyhunt()
# List all English news categories.
for cat in client.categories.list(language=Language.ENGLISH, limit=5):
print(cat.name, cat.slug, cat.story_count)
# Pick the first category and browse its latest stories.
category = client.categories.list(language=Language.ENGLISH, limit=1).first()
if category is not None:
for story in category.stories.list(limit=3):
print(story.title, story.source_name, story.published_at)
# Drill into the first story for the full article body.
story = category.stories.list(limit=1).first()
if story is not None:
article = story.details()
print(article.title)
print(article.body_text[:200] if article.body_text else "(video post)")
print("hashtags:", article.hashtags)
# Point-lookup an article by id discovered above.
if category is not None and story is not None:
try:
full = client.articles.get(article_id=story.article_id)
print(full.title, full.word_count, "words")
except InputNotFound:
print("article no longer available")
print("exercised: categories.list / stories.list / story.details / articles.get")
Lists the news categories Dailyhunt offers for one language: the navigation topics (Home, News, Sports, Politics, and a few editorial topics such as Daily Share) plus the category sections shown on the home page (World, Crime, Entertainment, Business, Mobiles and Gadgets). One row per category; category_id is the value get_category_news consumes. Navigation-only topics that are not story feeds (event timelines) are omitted. story_count is the site's own abbreviated counter (e.g. '13M') and is only present for navigation topics; in_navigation tells the two groups apart. Names are localized to the requested language. One page fetch per call.
| Param | Type | Description |
|---|---|---|
| language | string | Language edition to read. |
{
"type": "object",
"fields": {
"total": "number of categories returned",
"language": "language code the list was read for",
"categories": "array of category rows: category_id (32-hex id), name (localized), slug, story_count (site's abbreviated count string or null), page_url, in_navigation (true for header topics, false for home-page sections)"
},
"sample": {
"data": {
"total": 11,
"language": "en",
"categories": [
{
"name": "News",
"slug": "news",
"page_url": "https://m.dailyhunt.in/news/india/english/News-topics-a3617d6e958a315152f3c08c3f2b5f1b",
"category_id": "a3617d6e958a315152f3c08c3f2b5f1b",
"story_count": "13M",
"in_navigation": true
},
{
"name": "World",
"slug": "world",
"page_url": "http://m.dailyhunt.in/news/india/english/World-topics-0c239a072fc5b7b3e687965b91150043",
"category_id": "0c239a072fc5b7b3e687965b91150043",
"story_count": null,
"in_navigation": false
}
]
},
"status": "success"
}
}About the Dailyhunt API
What the API Covers
The API reads Dailyhunt's multilingual news index — one of India's largest aggregators — and returns structured data across three endpoints. list_categories accepts a language parameter and returns every navigation topic and home-page section for that edition, including a localized name, a slug, a 32-hex category_id, and the site's abbreviated story_count string. Supported editions span Hindi, English, Tamil, Telugu, Bengali, Marathi, and about a dozen more Indian languages.
Story Feeds and Pagination
get_category_news takes a required category_id (from list_categories) plus an optional language and an opaque cursor string for pagination. Each page returns roughly 20 stories in the stories array. Every story row includes article_id, title, summary (the plain-text lead paragraph or null), format (e.g. HTML), sub_format, language, category_key, image_url, source_name, and published_at. The has_more boolean and next_cursor field tell you whether additional pages exist and how to request them; omit cursor entirely for the first page.
Full Article Detail
get_article accepts an article_id from any feed response and returns the complete story: body_html (the site's raw HTML), body_text (plain text), word_count, hashtags, page_url, share_url, and image_url. For video posts, body_html and body_text are null and video_url plus video_duration_seconds are populated instead. This lets downstream consumers branch on the format field to handle text and video articles differently.
The Dailyhunt API is a managed, monitored endpoint for m.dailyhunt.in — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when m.dailyhunt.in changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official m.dailyhunt.in API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregating breaking news headlines in Hindi, Tamil, or other Indian languages for a regional content dashboard
- Building a multilingual news monitor that pages through category feeds using next_cursor and alerts on keyword matches in the title or summary fields
- Extracting body_text from get_article to run NLP pipelines (entity extraction, sentiment analysis) on Indian-language journalism
- Tracking story_count trends per category over time to gauge editorial focus across language editions
- Indexing hashtags returned by get_article to map trending topics across Dailyhunt's editorial taxonomy
- Comparing published_at timestamps across language editions of the same category to measure translation or syndication lag
- Supplying full article HTML to a read-mode renderer for distraction-free consumption of long-form regional news
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.