Gov APImptenders.gov.in ↗
Access active government tenders from the Madhya Pradesh eProcurement portal. Get organisations, tender IDs, titles, reference numbers, and closing dates.
What is the Gov API?
The mptenders.gov.in API covers the full active-tender listing on the Madhya Pradesh Government eProcurement portal across 2 endpoints. The list_organisations endpoint returns every organisation currently publishing active tenders — around a hundred — along with tender counts in a single call. The list_tenders endpoint returns tender-level detail including tender ID, reference number, title, published date, closing date, and organisation chain.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/53036d5c-a002-4c33-972b-0994285fed7a/list_organisations' \ -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 mptenders-gov-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: MP eProcurement tenders — browse organisations then drill into tenders."""
from parse_apis.mptenders_gov_in_api import MpTenders, OrganisationNotFound
client = MpTenders()
# List organisations with active tenders, capped to 5.
for org in client.organisations.list(limit=5):
print(org.organisation_name, f"({org.tender_count} active tenders)")
# Drill into the first organisation's tenders via sub-resource navigation.
org = client.organisations.list(limit=1).first()
if org is not None:
for tender in org.tenders.list(limit=3):
print(tender.title, "|", tender.published_date, "→", tender.closing_date)
# Fetch a single tender to show detail fields.
tender = org.tenders.list(limit=1).first()
if tender is not None:
print(tender.tender_id, tender.reference_no, tender.detail_url)
# Typed error handling: unknown organisation_id.
try:
bogus = client.organisation(organisation_id="nonexistent==")
bogus.tenders.list(limit=1).first()
except OrganisationNotFound:
print("Organisation not found — expected for an invalid id")
print("exercised: organisations.list / organisation().tenders.list / OrganisationNotFound")
Returns every organisation that currently has active tenders on the portal, with its active tender count and the organisation_id that list_tenders consumes. One round trip, no pagination; the whole list (around a hundred organisations) is returned in one call. total_tender_count is the sum of the per-organisation counts, i.e. the number of active tenders on the portal.
No input parameters required.
{
"type": "object",
"fields": {
"organisations": "array of organisation records: organisation_id (opaque token, pass unchanged to list_tenders), organisation_name, tender_count (integer, active tenders for this organisation)",
"organisation_count": "integer, number of organisations returned",
"total_tender_count": "integer, sum of tender_count over all organisations"
},
"sample": {
"data": {
"organisations": [
{
"tender_count": 16,
"organisation_id": "SPj1fp4UyfZSNWcUiqPusHw==",
"organisation_name": "Bhopal City Link Limited"
},
{
"tender_count": 43,
"organisation_id": "SCywdk1FJJR+f8aupTpAPc9S0Fec7wUuNy1YFXyqSerE=",
"organisation_name": "Department of Higher Education"
}
],
"organisation_count": 96,
"total_tender_count": 5515
},
"status": "success"
}
}About the Gov API
What the API covers
The API mirrors the active-tender listing on mptenders.gov.in, the official eProcurement portal for Madhya Pradesh state government. It exposes two endpoints that together let you enumerate every active tender currently on the portal: first by organisation, then by individual tender records within each organisation.
list_organisations
Calling list_organisations requires no parameters and returns the complete set of organisations that currently hold active tenders. Each record includes an organisation_id (an opaque token you pass unchanged to list_tenders), the organisation_name, and a tender_count. The response also includes organisation_count and total_tender_count so you can assess scope before fetching individual tenders.
list_tenders
list_tenders takes a required organisation_id from the previous endpoint, plus optional limit and offset integers for client-side pagination. Values above 5000 for limit are clamped to 5000. Each tender record in the tenders array includes tender_id, title, reference_no, organisation_name, organisation_chain, published_date, closing_date, and a direct URL to the tender detail page on the portal. The has_more boolean, total_count, and returned_count fields let you walk through large organisation result sets without guesswork.
Ordering and freshness
Tenders are returned in the portal's native order — newest published first. The data reflects active tenders only; closed, archived, or cancelled tenders are not included. Coverage is limited to organisations and tenders the portal itself marks as currently active.
The Gov API is a managed, monitored endpoint for mptenders.gov.in — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when mptenders.gov.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 mptenders.gov.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?+
- Monitor new tenders from a specific MP government department by polling list_tenders for that organisation_id daily
- Build a closing-date alert system using the closing_date field across all active organisations
- Aggregate total active procurement volume by summing tender_count across all organisations from list_organisations
- Identify which government bodies are most actively procuring by ranking organisations by tender_count
- Index tender reference numbers and titles for full-text search across all active MP state tenders
- Auto-populate a procurement CRM with tender_id, title, and the direct detail-page URL for each new tender
- Track how many tenders an organisation publishes over time by comparing total_tender_count snapshots
| 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.