Developers

PublicFeed API

Read-only JSON over HTTPS, an OpenAPI description, bulk exports and an MCP server for AI agents. No key or sign-up is needed to start.

Quick start OpenAPI JSON

Quick start

The five newest explained updates for Jammu and Kashmir:

curl "https://publicfeed.in/api/v1/updates?state=jk&limit=5"

Deadlines in the next two weeks, anywhere in India:

curl "https://publicfeed.in/api/v1/deadlines?days=14"

In Python, with no extra packages:

import json, urllib.request

url = "https://publicfeed.in/api/v1/updates?q=consultation&limit=10"
with urllib.request.urlopen(url) as response:
    page = json.load(response)
for update in page["data"]:
    print(update["issued_date"], update["headline"], update["source"]["official_url"])

Keys

Without a key you are on the free plan, counted per IP address. With a paid plan, send your key in a header. Paid keys (the full archive, bulk exports and higher limits) are arranged by email for now: write to the maintainer.

curl -H "Authorization: Bearer YOUR_KEY" "https://publicfeed.in/api/v1/me"

X-API-Key: YOUR_KEY also works. Never put a key in a URL: URLs end up in logs and browser history. Each response says which plan served it in the X-PublicFeed-Plan header.

Endpoints

All under https://publicfeed.in/api/v1, all GET.

PathReturnsPlans
/updatesExplained updates, newest first, with filtersAll (free: last 30 days)
/updates/{id}One updateAll
/deadlinesDated deadlines, effective dates and end dates, soonest firstAll (free: next 30 days)
/alertsWeather and disaster alerts in force (CAP, from NDMA SACHET)All
/sourcesSource websites represented in updatesAll
/export/{dataset}.{jsonl|csv}A whole dataset as a fileDeveloper, Pro
/meYour plan and remaining requestsAll
/openapi.jsonOpenAPI 3.1 descriptionAll

Updates

Filters combine. Text matching is case-insensitive.

ParameterMeaning
qWords that must all appear in the headline, summary, issuer, number, topics or places
stateA state or union territory code, such as jk, mh, dl; in for national items only
topicA reader topic such as Budget, or a word from the document's own topics
sourceA source key, such as pib or cag_reports (see /sources and each record's source.key)
typeThe source's document type, such as Press release or Notification
intentchanges, consultations, opportunities or updates (a browsing aid, not a legal status)
issuerWords in the issuing body's or department's name
since, untilIssue date range, YYYY-MM-DD
changed_sinceRecords written to the feed after this timestamp (see sync)
limit, offsetPaging; follow meta.next

Deadlines

/deadlines?days=60&state=mh&kind=deadline lists dated rows from the updates: deadline (last date to comment, apply or comply) and effective (takes effect). Ask for kind=period_end to get the end dates of periods such as rosters and schemes. Deadlines worded relative to another event have no fixed date and appear only in the update's dates. The same calendar is on the deadlines page.

Records

Every response has data, meta (totals, paging, plan, feed_updated_at), attribution and license. An update looks like this (a live record):

{
  "schema": "publicfeed.update.v1",
  "id": "PIB-2327720",
  "url": "https://publicfeed.in/orders/PIB-2327720",
  "headline": "India Post expands 24 Speed Post service with 27 new lanes in Maharashtra",
  "summary": "The Department of Posts, Maharashtra Circle announced on 23 October 2026 the expansion of its premium 24 Speed Post service beyond the existing metro-to-metro network. The expansion adds 27 new lanes—25 for documents and 2 for parcels—to provide faster, time-bound delivery for retail and bulk customers in Mumbai, Thane, Navi Mumbai, Pune, Nashik, and Nagpur. The release does not say when these changes take effect, but it lists designated booking and delivery offices across the region. Customers can access these services at specific booking offices and verify lane availability at their nearest post office.",
  "key_points": [
    "27 new lanes added: 25 for documents and 2 for parcels.",
    "New routes connect Mumbai, Thane, Navi Mumbai, Pune, Nashik, Nagpur, and Ahmedabad.",
    "Parcel lanes operational on Mumbai–Pune and Mumbai–Ahmedabad routes.",
    "Bookings accepted at 28 designated offices per lane for Mumbai outbound routes.",
    "Bookings accepted at 12 designated offices per lane for Thane & Navi Mumbai outbound routes."
  ],
  "issued_date": "2026-10-23",
  "listing_date": "2026-10-23",
  "document": {
    "form": "Press release",
    "number": "2327720",
    "type": "Press release",
    "legal_character": "informational_communication",
    "functions": [
      "announces"
    ],
    "cites": []
  },
  "issuer": "Department of Posts, Maharashtra Circle",
  "department": "Ministry of Communications",
  "source": {
    "key": "pib",
    "name": "Press Information Bureau",
    "site": "pib.gov.in",
    "official_url": "https://www.pib.gov.in/PressReleseDetail.aspx?PRID=2327720"
  },
  "topics": [
    "postal services",
    "logistics",
    "maharashtra"
  ],
  "reader_topics": [
    "Government services"
  ],
  "intent": "updates",
  "states": [
    "mh"
  ],
  "national": false,
  "places": [
    "Maharashtra Circle"
  ],
  "applies_to": [
    "retail and bulk customers"
  ],
  "dates": [],
  "revision": "1402317412f95694",
  "recorded_at": "2026-10-23T17:14:29.006112+00:00",
  "provenance": {
    "method": "ai_summary",
    "automated_check": "pass",
    "human_review": "pending"
  }
}

summary and key_points are AI-generated explanations (see provenance); source.official_url is the authority. issued_date is the document's date. recorded_at is when that revision was written to the feed, not a publication date.

Keeping in sync

Poll /updates?changed_since=… with the time of your last successful sync, then upsert by id. revision changes only when an update's content changes, so you can skip records whose revision you already have. Paid plans can start from a full /export/updates.jsonl.

Limits and errors

PlanPer hourPer dayRows per pageHistory
Free601,00025Last 30 days
Developer2,00020,000100Full archive
Pro10,000100,000500Full archive

A bulk export counts as 25 requests. Responses carry X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (seconds). Errors are JSON: {"error": {"code", "message", "docs"}} with status 400 (bad parameter), 401 (unknown key), 403 (upgrade_required), 404, 429 (rate_limited, with Retry-After) or 503.

Within v1, fields may be added but existing ones are not renamed or removed.

MCP for AI agents

The remote MCP server at https://publicfeed.in/mcp (Streamable HTTP) offers the tools search_updates, get_update, upcoming_deadlines, weather_alerts and list_sources, on the same plans and limits as the API.

Claude Code:

claude mcp add --transport http publicfeed https://publicfeed.in/mcp

Claude, ChatGPT and other apps with custom connectors: add a connector with the URL above. Clients configured with JSON, such as Cursor or VS Code:

{"mcpServers": {"publicfeed": {"url": "https://publicfeed.in/mcp"}}}

With a paid key, add a header: "headers": {"Authorization": "Bearer YOUR_KEY"}.

Widget for your site

Show the latest official updates for a state or topic on your own website, free. Paste this where the list should appear; change edition to a state code such as mh, or add &topic=Health, &limit=8 or &theme=dark.

<iframe src="https://publicfeed.in/embed?edition=jk&limit=5" title="Latest official updates from PublicFeed" width="100%" height="420" style="border:0" loading="lazy"></iframe>

The widget has no scripts, cookies or tracking. Its links open PublicFeed in a new tab.

Attribution

Where you show PublicFeed data, show a visible credit with a link, and keep each record's official source link. For example:

Source: <a href="RECORD_URL">PublicFeed</a>, from <a href="OFFICIAL_URL">the official document</a>

Do not present summaries as official text or as legal advice. The full conditions are in the data terms. Questions or a bug? Email the maintainer.