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 100+ 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, result_id, or contract_no 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 100+ 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/gem-contractsKey Required

List & Search GeM Contracts

Search and filter verified Government e-Marketplace (GeM) executed purchase orders and contract awards. Filter by date range, contract value bounds, issuing department/organisation, seller company name, or full-text keywords. Returns core summary records. Administrative buyer metadata (organization_type, ministry, office_zone, buyer_designation, buying_mode) and supplier/specification details (gem_seller_id, contact_no, email, brand, model) are provided exclusively in GET /gem-contracts/:contract_no.

Query Parameters10 parameters available

ParameterTypeDefaultDescription
pageinteger1Page number, starting from 1.
limitinteger15Records per page. Hard maximum: 50.
searchstring—Search across contract number, keywords, seller/company name, or product (alias: search_keywords).
departmentstring—Filter by department or organisation name (comma-separated, matches both department and organisation).
company_namestring—Filter contracts awarded to a specific supplier or seller company name (alias: seller_name).
date_fromdate (YYYY-MM-DD)—Filter contracts executed on or after this date (alias: contract_date_from).
date_todate (YYYY-MM-DD)—Filter contracts executed on or before this date (alias: contract_date_to).
min_valuenumber—Minimum total contract value in INR.
max_valuenumber—Maximum total contract value in INR.
sort_orderstringdescSort direction: 'desc' (most recent first) or 'asc'. Sorting is locked by contract_date.

Required Headers

HeaderTypeDescription
X-API-KeystringYour API key.
X-API-SecretstringYour API secret.
GET/gem-contracts/:contract_noKey Required

Get GeM Contract Details

Fetch comprehensive details of a single GeM contract by its official contract number (e.g., 'GEMC-511687712345678'). Returns buyer designation, office zone, seller details, itemized product, brand, model, unit price, quantity, and verified purchase order download link.

Path Parameters

ParameterTypeRequiredDescription
contract_nostringREQUIREDGeM Contract Number (e.g., 'GEMC-511687712345678'). URL-encoded if containing slashes or special characters.

Query Parameters1 parameters available

ParameterTypeDefaultDescription
fieldsstring—Comma-separated list of allowed fields to project.

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 NameCategoryData TypeDescription
tender_procure_idTenderstringCanonical Tender Procure ID (e.g., 'TP-2026-88192'). Persistent across updates.
tender_noTenderstringOfficial bid / tender reference number from the source procurement portal.
tender_titleTenderstringTitle describing work, supplies, or services required.
descriptionTenderstringFull technical overview and scope of requirements.
categoryTenderstringPrimary tender classification (e.g., 'Works', 'Goods', 'Services').
product_categoryTenderstringGranular product taxonomy classification.
portalTenderstringSource authority portal (e.g., GEM, Railway, eproc, TenderGuj, KPPP).
portal_urlTenderstringDirect verifiable link to original tender page on source portal.
departmentTenderstringIssuing government department or agency.
organisationTenderstringIssuing public sector corporation, ministry, or autonomous board.
officeTenderstringSpecific tendering office or zonal division.
quantityTenderstringQuantity of items or scope measure.
ministryTenderstringCentral or State Ministry overseeing the procuring body.
publish_dateTenderdatetimeISO 8601 UTC timestamp when tender was first published.
opening_dateTenderdatetimeISO 8601 UTC timestamp for technical bid opening.
closing_dateTenderdatetimeISO 8601 UTC bid submission deadline.
date_typeTenderstringIndicates original portal time format: 'utc' or 'legacy_ist'.
bid_typeTenderstringBid structure: 'Single Packet', 'Two Packet', 'Three Packet', 'Open'.
tender_typeTenderstringTender category: 'Open Tender', 'Limited Tender', 'Custom Bid'.
evaluation_methodTenderstringAward criteria: 'L1' (Lowest Price), 'QCBS' (Quality & Cost Based), 'Item-Wise'.
validityTenderstringBid offer validity duration (e.g., '90 Days', '180 Days').
cityTenderstringCity where work is executed or goods delivered.
stateTenderstringState where procuring office is located.
pincodeTenderstringPostal PIN code.
emd_requiredTenderstring/boolWhether Earnest Money Deposit is mandatory for this bid.
emd_total_amountTenderstring/numTotal EMD amount in INR.
emd_installmentsTenderobject/stringInstallment options for EMD payment if permitted by tender rules.
estimated_valueTendernumberEstimated tender cost in INR (null or 0 if unannounced).
inspection_requiredTenderstring/boolPre-dispatch or on-site inspection requirement flag.
tender_submission_remarkTenderstringSpecial instructions regarding offline submissions or bank guarantees.
additional_detailsTenderstring/objectMiscellaneous parameters including pre-bid meeting notes.
statusTenderstringComputed lifecycle status: 'live' or 'closed' (available on GET /tenders/:tender_id).
daysRemainingTenderintegerComputed days left until closing deadline (available on GET /tenders/:tender_id).
isLiveTenderbooleanComputed boolean flag indicating whether tender is actively open.
tender_criteriaTenderobjectEligibility criteria object (turnover, past experience, scores).
tender_exemptionTenderobjectExemption parameters (MSME, DPIIT Startup waivers).
tender_documentsTenderarrayOrigin tender documents: `[{ document_name, document_url }]` (available on GET /tenders/:tender_id).
tender_feeTenderobjectTender document fee, processing fee, and payment destination (available on GET /tenders/:tender_id).
tender_itemsTenderarrayBill of Quantities (BOQ) line items with unit, quantity, and specs (available on GET /tenders/:tender_id).
tender_requirementsTenderobject/arrayMandatory vendor qualification requirements (available on GET /tenders/:tender_id).
contract_noGeM ContractstringOfficial Government e-Marketplace contract / order number (e.g., 'GEMC-511687712345678').
statusGeM ContractstringCurrent order lifecycle status (e.g., 'Order Placed', 'Delivered', 'Completed').
departmentGeM ContractstringIssuing government department.
organisationGeM ContractstringIssuing public sector corporation, military wing, or autonomous authority.
contract_dateGeM ContractdatetimeISO 8601 UTC timestamp or date when contract order was officially executed.
total_valueGeM ContractnumberTotal executed contract value in INR.
download_linkGeM Contractstring (URL)Direct link to download the official verified GeM contract PDF order.
company_nameGeM ContractstringOfficial registered business / corporate name of the winning seller.
productGeM ContractstringTitle or category description of contracted products / services.
quantityGeM ContractstringTotal quantity or units supplied under the order.
priceGeM ContractnumberUnit price per item / unit in INR.
organization_typeGeM ContractstringClassification of procuring entity: 'Central Ministry', 'State Government', 'Central PSU', etc. (available on GET /gem-contracts/:contract_no).
ministryGeM ContractstringParent Central or State Ministry overseeing the buyer department (available on GET /gem-contracts/:contract_no).
office_zoneGeM ContractstringRegional headquarters, zonal command, or procuring office location (available on GET /gem-contracts/:contract_no).
buyer_designationGeM ContractstringOfficial designation and appointment of the purchasing officer (available on GET /gem-contracts/:contract_no).
buying_modeGeM ContractstringProcurement mode utilized on GeM: 'Direct Purchase', 'L1', 'Custom Bid', 'Bidding' (available on GET /gem-contracts/:contract_no).
gem_seller_idGeM ContractstringUnique seller / vendor account ID registered on GeM (available on GET /gem-contracts/:contract_no).
contact_noGeM ContractstringSeller contact phone number (available on GET /gem-contracts/:contract_no).
emailGeM ContractstringSeller official communication email address (available on GET /gem-contracts/:contract_no).
brandGeM ContractstringBrand name of the supplied equipment or materials (available on GET /gem-contracts/:contract_no).
modelGeM ContractstringModel number or variant identifier of the supplied product (available on GET /gem-contracts/:contract_no).
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();

Search GeM Contracts by Department & Value (Node.js Axios)

const axios = require('axios');

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

async function getGemContracts(page = 1) {
  try {
    const res = await axios.get(`${API_BASE}/gem-contracts`, {
      headers: {
        'X-API-Key': process.env.TENDER_API_KEY,
        'X-API-Secret': process.env.TENDER_API_SECRET,
      },
      params: {
        page,
        limit: 15,
        search: 'solar',
        department: 'Defence,Railway',
        min_value: 100000,
        sort_order: 'desc',
      },
    });

    const { contracts, pagination } = res.data.data;
    console.log(`Page ${pagination.currentPage} of ${pagination.totalPages} (${pagination.totalRecords} records)`);
    return contracts;
  } catch (err) {
    console.error('Error fetching GeM contracts:', err.response?.data || err.message);
  }
}
getGemContracts();
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 and contract_date fields reflect when each record was officially posted 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