Gov APIeproc2.bihar.gov.in ↗
Access active, past, and cancelled tenders from Bihar Government's e-Procurement portal. Filter by department, keyword, and status. 5 endpoints covering 500+ live tenders.
What is the Gov API?
This API exposes tender data from the Bihar Government e-Procurement portal (eproc2.bihar.gov.in) across 5 endpoints. The get_active_tenders endpoint alone typically returns 500–900+ live tender records in a single call, each containing fields like tender_ref_no, bid_start_date, bid_end_date, pac_amount, and dept_id. Past, cancelled, and detailed tender views are also available, along with a full department directory for filtering.
curl -X GET 'https://api.parse.bot/scraper/85caabf7-463f-4ee5-811c-64ff73525248/get_active_tenders?dept_id=538' \ -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 eproc2-bihar-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.
from parse_apis.bihar_e_procurement_tenders_api import BiharTenders, Tender, TenderDetail, Department
client = BiharTenders()
# List all departments
for dept in client.departments.list(limit=5):
print(dept.name, dept.department_id, dept.code)
# Get active tenders for a specific department (Water Resources, ID 731)
water = client.department(department_id=731)
for tender in water.active_tenders(text_filter="embankment", limit=3):
print(tender.tender_id, tender.tender_ref_no, tender.bid_end_date)
# Get past tenders for the department with pagination
for past in water.past_tenders(limit=5):
print(past.tender_id, past.description, past.status)
# Get cancelled tenders
for cancelled in water.cancelled_tenders(limit=3):
print(cancelled.tender_id, cancelled.cancel_date, cancelled.cancel_reason)
# Get full tender details by ID
detail = client.tenders.get(tender_id="133124")
print(detail.tender_ref_no, detail.pac_amount, detail.currency)
print(detail.schedule_dates.bid_start_date, detail.schedule_dates.bid_end_date)
# Navigate from a listing tender to its full details
for t in water.active_tenders(limit=1):
full = t.refresh()
print(full.nit, full.offer_validity_days, full.min_bid_number)
Retrieves all currently active/open tenders from Bihar e-Procurement. Returns the full set (typically 500-1000+) in a single response. Supports server-side filtering by department ID and client-side keyword text search against description and reference number. Each tender includes schedule dates, status, and department info but not PAC amount (use get_tender_details for full financial data).
| Param | Type | Description |
|---|---|---|
| dept_id | string | Department ID to filter tenders (e.g. '731' for Water Resources Department, '945' for Road Construction Department). Obtain IDs from get_departments endpoint. |
| text_filter | string | Keyword to filter tenders by description or reference number (client-side, case-insensitive) |
{
"type": "object",
"fields": {
"type": "string, always 'active'",
"total": "integer, total number of matching tenders",
"tenders": "array of tender objects"
},
"sample": {
"data": {
"type": "active",
"total": 1045,
"tenders": [
{
"org_id": 538,
"status": 3,
"dept_id": 800,
"bid_parts": 2,
"tender_id": 133124,
"pac_amount": null,
"cancel_date": null,
"description": "Selection of Agencies for Providing Outsourced Manpower for Performing and Managing Day to Day Activities related to sanitation work for NAGAR PANCHAYAT SINGHWARA",
"bid_end_date": "2026-06-11T09:30:00Z",
"publish_date": "2026-06-05T12:20:39Z",
"bid_open_date": "2026-06-12T10:00:00Z",
"cancel_reason": null,
"org_tender_id": 132929,
"tender_ref_no": "Re-NIT NO.: 03/2026-27/NP- SINGHWARA",
"bid_start_date": "2026-06-05T12:30:00Z",
"tender_type_id": 120,
"tender_category_id": 101,
"doc_submission_end_date": "2026-06-12T09:30:00Z",
"procurement_category_id": 1557
}
]
},
"status": "success"
}
}About the Gov API
Tender Listings by Status
The API covers three tender lifecycle states. get_active_tenders returns all currently open tenders in one response — no pagination needed — and accepts an optional dept_id to scope results to a single department, plus a text_filter for case-insensitive keyword matching against description and reference number fields. get_past_tenders covers closed tenders and uses server-side pagination via page and page_size parameters, returning a has_more flag to drive iteration. get_cancelled_tenders returns cancelled records including cancel_date and cancel_reason; because the full cancelled dataset runs into many thousands of records, using the dept_id filter is strongly recommended.
Tender Detail and Department Directory
get_tender_details accepts a numeric tender_id (obtained from any listing endpoint) and returns fields not present in list views: pac_amount (Probable Amount of Contract), nit (Notice Inviting Tender text), currency, bid_parts, indent_no, and schedule dates. get_departments returns the full directory of participating Bihar government bodies, each with department_id, parent_id, name, code, and hierarchy — the department_id values from this endpoint map directly to dept_id filter parameters across all listing endpoints.
Filtering and Pagination Notes
For active tenders, text_filter is applied client-side after the full dataset is fetched, so all 500–900+ records are retrieved before filtering. For past and cancelled tenders, text_filter and dept_id interact with server-side logic. The tender_id field returned in listing responses is the key to retrieving full detail via get_tender_details — it is a numeric string (e.g., '130728') rather than the human-readable tender_ref_no.
The Gov API is a managed, monitored endpoint for eproc2.bihar.gov.in — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when eproc2.bihar.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 eproc2.bihar.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 all open Bihar government infrastructure tenders filtered by the Road Construction department (
dept_id: '945') to track new bid opportunities. - Build a tender alert system by polling
get_active_tendersand comparingbid_end_dateagainst today's date for upcoming deadlines. - Retrieve
pac_amountandnittext viaget_tender_detailsto populate a contract value analysis dashboard. - Audit cancelled procurement by pulling
get_cancelled_tenderswith a specificdept_idand reviewingcancel_reasonfields for patterns. - Construct a department-to-tender index by combining
get_departmentsoutput with filtered calls toget_active_tendersfor eachdepartment_id. - Page through historical closed tenders using
get_past_tenderswithpageandpage_sizeto build a local archive for trend analysis.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does eproc2.bihar.gov.in have an official developer API?+
What does `get_cancelled_tenders` return, and why is filtering recommended?+
tender_id, tender_ref_no, description, cancel_date, and cancel_reason. The full unfiltered cancelled dataset spans many thousands of records, so passing a dept_id is strongly recommended to limit response size and latency.Does `get_tender_details` return bid document attachments or corrigendum notices?+
get_tender_details covers fields like pac_amount, nit, currency, bid_parts, indent_no, and schedule dates, but does not include attached documents or corrigendum notices. You can fork this API on Parse and revise it to add an endpoint targeting those resources.How does `text_filter` behave differently across endpoints?+
get_active_tenders, filtering is client-side: the full dataset (500–900+ records) is fetched first, then matched case-insensitively against description and tender_ref_no. For get_past_tenders and get_cancelled_tenders, the filter interacts with server-side query logic, so results are scoped before transmission.