Tender Procure Distribution API•v1.1

Developer API Documentation

Comprehensive programmatic access to thousands of live government tenders, GeM contracts, historical AOC bid results, and reference datasets across 12+ public procurement portals.

v1.1 Specification
Section 1

Introduction & Capabilities

Welcome to the Tender Procure Distribution API. This API provides programmatic access to a comprehensive, continually updated database of Indian government tenders, concluded bid results (Award of Contract records), BOQ item specifications, criteria, exemptions, and origin documents.

Engineered with an ID-first query pipeline and an in-memory caching engine, the API delivers fast response times for client dashboards, automatic alert pipelines, and internal ERP procurement integrations.

Base URL & Environments

All requests must target the production endpoint over HTTPS:

HTTPS BASEhttps://tenderprocure.com/api/dist/v1

Supported Procurement Portals (12)

Filter by any portal using the portal parameter (comma-separated for multi-portal searches).

GEMCentral Marketplace
Government e-Marketplace
BidsRACustom Bids
RailwayCentral Transport
Indian Railways (IREPS)
WorksGoodsServices
eprocNational Portal
Central Public Procurement Portal (CPPP)
MinistriesPSUs
TenderGujState Portal
Gujarat State Procurement (Nprocure)
Gujarat Departments
KPPPState Portal
Karnataka Public Procurement Portal
Karnataka Urban & Rural
Telangana eProcurementState Portal
Telangana State E-Procurement
State Works
Andhra Pradesh EprocurementState Portal
AP eProcurement Portal
AP Government
Bihar eProcurementState Portal
Bihar State Procurement
RoadsHealthEducation
ISRO eProcurementSpecialized PSU
Indian Space Research Organisation
High TechElectronics
HALDefense PSU
Hindustan Aeronautics Limited
AviationDefense
CPWD eTendersCentral Works
Central Public Works Department
Infrastructure
AuctionDisposal / Leasing
Government eAuctions
PropertyScrapMineral
Section 2

Authentication & Security Scopes

Every request (except the public /health endpoint) must include two authentication headers. The server verifies both credentials on each request; invalid or missing credentials return HTTP 401 Unauthorized.

HeaderTypeRequiredDescription
X-API-KeystringRequiredYour unique client API key.
X-API-SecretstringRequiredYour confidential API secret key. Verified using timing-safe comparison.
Security Requirement: Never expose your API credentials in browser-side code or public repositories. Store them as environment variables on your backend server and proxy calls to Tender Procure.

IP & Domain Whitelisting

Client keys can optionally be restricted to specific server IP addresses or authorized Origin domains. Calls from non-whitelisted sources return 403 Forbidden.

Keyword & State Scoping

If your client key has configured state boundaries (allowed_states) or keyword boundaries (allowed_keywords), the API automatically restricts responses accordingly.

Section 3

Rate Limits & Response Headers

The API applies a sliding 60-second window and a daily quota that resets at midnight UTC. Standard limits are 60 requests per minute and 10,000 requests per day.

HeaderTypeDescription
X-RateLimit-Limit-MinuteintegerMaximum requests permitted per rolling 60-second window (default: 60).
X-RateLimit-Remaining-MinuteintegerRemaining calls available before rate throttling is enforced.
X-RateLimit-Limit-DayintegerMaximum daily calls assigned to your license tier (default: 10,000).
X-RateLimit-Remaining-DayintegerCalls remaining today. Resets automatically at 00:00:00 UTC.
Retry-AfterintegerReturned on HTTP 429. Number of seconds to wait before repeating request.

Handling HTTP 429 (Too Many Requests)

When rate limits are exceeded, the API responds with HTTP 429 and includes a Retry-After header indicating the number of seconds to wait. We recommend using exponential backoff before retrying.

Section 4

Standard Response Envelope & Error Format

All endpoints return a consistent JSON envelope with success, a unique requestId for tracking, the response payload in data, and execution metadata in meta.

Standard Success Envelope200 OK
{
  "success": true,
  "requestId": "7b4c91a0-e41c-43f9-bf51-2856f61f7ac9",
  "data": {
    "results": [
      "..."
    ],
    "pagination": {
      "currentPage": 1,
      "totalPages": 10,
      "totalRecords": 150,
      "recordsPerPage": 15,
      "hasNextPage": true,
      "hasPrevPage": false
    }
  },
  "meta": {
    "responseTime": "38ms",
    "cached": false,
    "timestamp": "2026-10-04T15:20:00.000Z"
  }
}
Standard Error Envelope400 Bad Request
{
  "success": false,
  "requestId": "7b4c91a0-e41c-43f9-bf51-2856f61f7ac9",
  "error": "Bad Request",
  "message": "Parameter 'limit' must be between 1 and 50.",
  "meta": {
    "timestamp": "2026-10-04T15:20:00.000Z"
  }
}

HTTP Status Codes

CodeStatusMeaning / Action
200OKRequest completed successfully. Results returned in standardized envelope.
400Bad RequestInvalid parameters, malformed ISO date, or parameter out of bounds.
401UnauthorizedMissing or incorrect X-API-Key or X-API-Secret credentials.
403ForbiddenClient inactive, subscription expired, unauthorized IP/domain, or blocked state/scope.
404Not FoundThe requested tender_id or result_id does not exist.
429Too Many RequestsExceeded 60 req/min or daily quota. Follow Retry-After header.
500Internal Server ErrorTransient server error. Share requestId with engineering team.
503Service UnavailableDatabase health check failed or maintenance window in progress.
Interactive URL & cURL Generator

API Request Playground

Select an endpoint, customize query parameters, and inspect the real-time cURL command ready to run in your terminal.

Portal
State
Status
Min Value (₹)
Max Value (₹)
Keywords
Department
Sort By
Limit
Generated Request URL
https://tenderprocure.com/api/dist/v1/tenders?portal=GEM%2CRailway&state=gujarat&status=live&min_value=500000&search_keywords=solar&sort_by=closing_date&sort_order=asc&limit=15
Ready-to-Run cURL Command
curl -X GET "https://tenderprocure.com/api/dist/v1/tenders?portal=GEM%2CRailway&state=gujarat&status=live&min_value=500000&search_keywords=solar&sort_by=closing_date&sort_order=asc&limit=15" \
  -H "X-API-Key: your_api_key_here" \
  -H "X-API-Secret: your_api_secret_here"
Section 5

Endpoints Reference

Full reference documentation for all active distribution API endpoints, with query parameters, sample responses, and code examples.

GET/healthPublic Access

Health Check

Public status endpoint designed for uptime monitoring tools, CI/CD checks, and status dashboards. Requires no API keys.

GET/tendersKey Required

List & Search Tenders

Search and filter live, closed, or archived tenders across 12+ government procurement portals. Features sub-100ms fulltext searching, value and quantity bounds, dates, exemption flags, and field projection.

Query Parameters32 parameters available

ParameterTypeDefaultDescription
pageinteger1Page number, starting from 1.
limitinteger15Records per page. Hard maximum: 50.
statusstringliveTender lifecycle: 'live' (active tenders), 'closed' (archived tenders), or 'all'.
portalstring—Comma-separated list: GEM, Railway, eproc, TenderGuj, KPPP, Telangana eProcurement, Andhra Pradesh Eprocurement, ISRO eProcurement, Bihar eProcurement, HAL, Auction, CPWD eTenders.
statestring—Comma-separated states (e.g., 'maharashtra,gujarat'). Automatically expands state name variations.
citystring—Comma-separated cities (e.g., 'mumbai,ahmedabad').
categorystring—Tender classification: Goods, Services, Works.
departmentstring—Matches across issuing department & organisation with fuzzy taxonomy (e.g. 'Railways,PWD').
organisationstring—Filter by exact or partial organisation name.
min_valuenumber—Estimated tender value greater than or equal to this INR amount.
max_valuenumber—Estimated tender value less than or equal to this INR amount.
show_na_amountbooleantrueWhen true, includes tenders where estimated value is unannounced, NA, or 0 alongside value range results.
min_quantityinteger—Filter tenders with item quantity >= min_quantity.
max_quantityinteger—Filter tenders with item quantity <= max_quantity.
emd_amount_minnumber—Minimum Earnest Money Deposit (EMD) in INR.
emd_amount_maxnumber—Maximum Earnest Money Deposit (EMD) in INR.
emd_nabooleanfalseWhen true, includes tenders where EMD is zero, NULL, or marked 'Not Applicable'.
startup_exemptionboolean—Filter for tenders with Startup Exemption.
msme_exemptionboolean—Filter for tenders with MSME / MSE Exemption.
search_keywordsstring—Comma-separated terms for FULLTEXT search across title, description, and keywords (OR logic). Max 20 keywords, min 2 chars.
searchstring—Legacy alias for search_keywords.
within_searchstring—Narrowing term (AND logic) applied to search_keywords results.
exclude_keywordsstring—Exclude tenders matching these comma-separated terms.
closing_date_fromdate (YYYY-MM-DD)—Tenders closing on or after this date.
closing_date_todate (YYYY-MM-DD)—Tenders closing on or before this date.
opening_date_fromdate (YYYY-MM-DD)—Bid opening on or after this date.
opening_date_todate (YYYY-MM-DD)—Bid opening on or before this date.
publish_date_fromdate (YYYY-MM-DD)—Published on or after this date.
publish_date_todate (YYYY-MM-DD)—Published on or before this date.
sort_bystringpublish_dateSort column: 'closing_date', 'publish_date', 'opening_date', 'created_at', 'estimated_value'.
sort_orderstringdescSort direction: 'asc' or 'desc'.
fieldsstring—Comma-separated field list to project. E.g. 'tender_procure_id,tender_title,closing_date,state,estimated_value'.

Required Headers

HeaderTypeDescription
X-API-KeystringYour unique API client key.
X-API-SecretstringYour API secret key.
GET/tenders/:tender_idKey Required

Get Tender Details

Fetch full tender record by its canonical Tender Procure ID (e.g., 'TP-2026-88192'). Returns criteria, exemptions, origin document links, tender fee details, BOQ line items, and computed lifecycle status.

Path Parameters

ParameterTypeRequiredDescription
tender_idstringREQUIREDTender Procure ID (e.g., 'TP-2026-88192').

Required Headers

HeaderTypeDescription
X-API-KeystringYour API key.
X-API-SecretstringYour API secret.
GET/resultsKey Required

List Tender Results (AOC)

Browse concluded bids, contract award dates, winning sellers, qualified bidders, and finalized pricing (Award of Contract records).

Query Parameters19 parameters available

ParameterTypeDefaultDescription
pageinteger1Page number, starting from 1.
limitinteger15Records per page (max 50).
departmentstring—Comma-separated departments.
organisationstring—Issuing organisation name.
statestring—Comma-separated states.
citystring—Comma-separated cities.
portalstringGEMFiltered by portal. Currently serves GEM results index.
search_keywordsstring—Unified search across tender title, bid number, TPRI ID, and keywords.
searchstring—Alias for search_keywords.
bidder_searchstring—Search for bids in which a specific company or supplier participated or qualified (e.g., 'Tata,Larsen').
bid_start_date_fromdate (YYYY-MM-DD)—Bid start date on or after this date.
bid_start_date_todate (YYYY-MM-DD)—Bid start date on or before this date.
bid_end_date_fromdate (YYYY-MM-DD)—AOC / bid conclusion date minimum bound.
bid_end_date_todate (YYYY-MM-DD)—AOC / bid conclusion date maximum bound.
bid_opening_date_fromdate (YYYY-MM-DD)—Opening date minimum bound.
bid_opening_date_todate (YYYY-MM-DD)—Opening date maximum bound.
yearintegerallPin results to award year based on bid_end_date (e.g., '2025', '2026').
sort_bystringbid_end_dateSort column: 'bid_end_date', 'bid_opening_date', 'bid_start_date', 'created_at'.
sort_orderstringdescSort order: 'asc' or 'desc'.

Required Headers

HeaderTypeDescription
X-API-KeystringYour API key.
X-API-SecretstringYour API secret.
GET/results/:result_idKey Required

Get Result Details

Fetch comprehensive result dossier by TPRI ID (e.g., 'TPRI-99120'). Includes full bidder lists, price breakdowns, and related tender parameters.

Path Parameters

ParameterTypeRequiredDescription
result_idstringREQUIREDTender Procure Result ID (e.g. 'TPRI-99120').

Required Headers

HeaderTypeDescription
X-API-KeystringYour API key.
X-API-SecretstringYour API secret.
GET/departmentsKey Required

Get Departments

Search and auto-complete government departments across Central and State ministries. Default returns 30 departments.

Query Parameters1 parameters available

ParameterTypeDefaultDescription
searchstring—Keyword to filter department names (e.g., 'Health', 'Railway').

Required Headers

HeaderTypeDescription
X-API-KeystringYour API key.
X-API-SecretstringYour API secret.
GET/organizationsKey Required

Get Organizations

Search and auto-complete public sector enterprises (PSUs), government boards, autonomous institutions, and corporations. Default returns 30 organizations.

Query Parameters1 parameters available

ParameterTypeDefaultDescription
searchstring—Keyword to filter organisation names (e.g., 'Rail', 'Power').

Required Headers

HeaderTypeDescription
X-API-KeystringYour API key.
X-API-SecretstringYour API secret.
Section 6

Field Reference & Data Dictionary

Field catalog of attributes returned across tender records, criteria, exemptions, origin documents, and BOQ item specifications. You can use the fields parameter on GET /tenders to select only the fields needed.

Field NameData TypeDescription
tender_procure_idstringCanonical Tender Procure ID (e.g., 'TP-2026-88192'). Persistent across updates.
tender_nostringOfficial bid / tender reference number from the source procurement portal.
tender_titlestringTitle describing work, supplies, or services required.
descriptionstringFull technical overview and scope of requirements.
categorystringPrimary tender classification (e.g., 'Works', 'Goods', 'Services').
product_categorystringGranular product taxonomy classification.
portalstringSource authority portal (e.g., GEM, Railway, eproc, TenderGuj, KPPP).
portal_urlstringDirect verifiable link to original tender page on source portal.
departmentstringIssuing government department or agency.
organisationstringIssuing public sector corporation, ministry, or autonomous board.
officestringSpecific tendering office or zonal division.
quantitystringQuantity of items or scope measure.
ministrystringCentral or State Ministry overseeing the procuring body.
publish_datedatetimeISO 8601 UTC timestamp when tender was first published.
opening_datedatetimeISO 8601 UTC timestamp for technical bid opening.
closing_datedatetimeISO 8601 UTC bid submission deadline.
date_typestringIndicates original portal time format: 'utc' or 'legacy_ist'.
bid_typestringBid structure: 'Single Packet', 'Two Packet', 'Three Packet', 'Open'.
tender_typestringTender category: 'Open Tender', 'Limited Tender', 'Custom Bid'.
evaluation_methodstringAward criteria: 'L1' (Lowest Price), 'QCBS' (Quality & Cost Based), 'Item-Wise'.
validitystringBid offer validity duration (e.g., '90 Days', '180 Days').
citystringCity where work is executed or goods delivered.
statestringState where procuring office is located.
pincodestringPostal PIN code.
emd_requiredstring/boolWhether Earnest Money Deposit is mandatory for this bid.
emd_total_amountstring/numTotal EMD amount in INR.
emd_installmentsobject/stringInstallment options for EMD payment if permitted by tender rules.
estimated_valuenumberEstimated tender cost in INR (null or 0 if unannounced).
inspection_requiredstring/boolPre-dispatch or on-site inspection requirement flag.
tender_submission_remarkstringSpecial instructions regarding offline submissions or bank guarantees.
additional_detailsstring/objectMiscellaneous parameters including pre-bid meeting notes.
statusstringComputed lifecycle status: 'live' or 'closed' (available on GET /tenders/:tender_id).
daysRemainingintegerComputed days left until closing deadline (available on GET /tenders/:tender_id).
isLivebooleanComputed boolean flag indicating whether tender is actively open.
tender_criteriaobjectEligibility criteria object (turnover, past experience, scores).
tender_exemptionobjectExemption parameters (MSME, DPIIT Startup waivers).
tender_documentsarrayOrigin tender documents: `[{ document_name, document_url }]` (available on GET /tenders/:tender_id).
tender_feeobjectTender document fee, processing fee, and payment destination (available on GET /tenders/:tender_id).
tender_itemsarrayBill of Quantities (BOQ) line items with unit, quantity, and specs (available on GET /tenders/:tender_id).
tender_requirementsobject/arrayMandatory vendor qualification requirements (available on GET /tenders/:tender_id).
Section 7

Code Examples & SDKs

Integration examples in Node.js and Python for querying live tenders and concluded bid outcomes.

Fetch Tenders with Pagination (Node.js Axios)

const axios = require('axios');

const API_BASE = 'https://tenderprocure.com/api/dist/v1';

async function getLiveTenders(page = 1) {
  try {
    const res = await axios.get(`${API_BASE}/tenders`, {
      headers: {
        'X-API-Key': process.env.TENDER_API_KEY,
        'X-API-Secret': process.env.TENDER_API_SECRET,
      },
      params: {
        page,
        limit: 15,
        portal: 'GEM,Railway',
        state: 'maharashtra,gujarat',
        min_value: 500000,
        sort_by: 'closing_date',
        sort_order: 'asc',
      },
    });

    const { tenders, pagination } = res.data.data;
    console.log(`Page ${pagination.currentPage} of ${pagination.totalPages} (${pagination.totalRecords} records)`);
    return tenders;
  } catch (err) {
    console.error('Error fetching tenders:', err.response?.data || err.message);
  }
}
getLiveTenders();
Section 8

Frequently Asked Questions

Answers to common questions regarding pagination, in-memory caching, rate scaling, and parameter filtering.

Our backend aggregation workers update records multiple times daily directly from GeM, IREPS (Railways), and state eProcurement portals. The publish_date field reflects when each tender was first published on the source portal.
Enterprise & Partner Support

Ready to integrate Tender Procure Distribution API?

To request API credentials, customized query boundaries, or higher rate limits, contact our developer operations team.

+91 88491 77221
Monday – Friday, 10:00 AM – 7:00 PM IST
Request API Access