РусскийEnglishDeutschFrançaisEspañolItaliano中文

Tender API documentation

The TenderInfo API provides structured access to tender notices from different countries, procurement portals and marketplace/RFQ sources. This documentation covers only tender records and tender search/export endpoints.

API overview

  • Base endpoint: https://www.tenderinfo.org/api/export
  • Request method: GET
  • Default response format: XML
  • Additional formats: JSON, JSON2 and CSV through dtype
  • Authentication: api_code token for paid or extended access; public examples can work without a key
  • Scope of this page: tenders only

Authentication

A user can pass api_code as a GET parameter. The current API page shows the user key and refresh key after login. Some public searches may return limited data without a key, while paid/extended access can open more source information and larger usage scenarios.

https://www.tenderinfo.org/api/export?kwords=construction&api_code=YOUR_TOKEN

Quick examples

TaskURL
Tender search, XMLhttps://www.tenderinfo.org/api/export?kwords=construction
Tender search, JSONhttps://www.tenderinfo.org/api/export?kwords=construction&dtype=json
One tender by IDhttps://www.tenderinfo.org/api/export?id=36660610&dtype=json
Country filterhttps://www.tenderinfo.org/api/export?kwords=construction&c14=1&dtype=json
Paginationhttps://www.tenderinfo.org/api/export?kwords=construction&page=2&dtype=json
Countries listhttps://www.tenderinfo.org/api/export?mode=countries&dtype=json
Sources listhttps://www.tenderinfo.org/api/export?mode=sources&dtype=json

Request parameters

ParameterTypeDescription
kwordsstringSearch phrase or keywords.
api_codestringUser API token. The export also works in public mode, but token is used for paid/extended access.
dtypestringOutput format: empty = XML by default, json, json2, csv.
idintegerReturn one tender by TenderInfo internal ID.
tend_numstringReturn/search tender by external tender number when the source number is known.
pageintegerPage number for search results.
price1integerMinimum tender price.
price2integerMaximum tender price.
date_startstringPublication date from.
date_endstringPublication date to.
sort_bystringSorting: by_date, by_date_end, by_price.
sort_deststringSorting direction: desc or asc.
kwords_minusstringWords to exclude from search.
minusintegerSet 1 to enable exclusion words.
nmintegerSet 1 to exclude marketplace/RFQ tenders.
c{country_id}integerCountry filter, for example c14=1.
e{source_id}integerSource/platform filter, for example e1=1.
mode=countriesstringExport the list of countries and identifiers.
mode=sourcesstringExport the list of sources/platforms and identifiers.

Tender response fields

FieldTypeDescription
IDintegerUnique TenderInfo tender identifier.
Date_publdateTender publication date.
TenderNamestringTender title translated or normalized for search.
TenderNameOrigstringOriginal tender title in the source language.
BuyerstringName of the contracting authority or buyer.
CountrystringCountry where the tender is published.
Country_IDintegerTenderInfo country identifier; full list is available via mode=countries.
RegionstringLocal region where available.
PricedecimalEstimated contract value or starting price.
CurrencystringCurrency code or currency name.
DeadlinedateBid submission deadline.
LangstringLanguage of the tender record.
Published_InstringSource or electronic procurement platform.
TenderLinkurlOriginal source link. Paid access can be required for full source links.
TenderLinkInnerurlInternal TenderInfo tender page.
ApiTenderLinkurlAPI link for receiving this tender as a separate record.
User_idintegerInternal buyer identifier when available.
ApiUserLinkurlAPI link for tenders of the same buyer when available.
ApiSourceLinkurlAPI link for tenders from the same source when available.
IsMarketPlaceintegerRFQ / marketplace tender flag.
DescriptiontextTender description. In search exports this can be replaced by searchFragmentXML.

Response formats

  • XML by default: /api/export?kwords=construction
  • JSON: add dtype=json
  • JSON2: add dtype=json2 for an alternative JSON structure with total and parsed XML fragments
  • CSV: add dtype=csv
  • All text should be treated as UTF-8.

Important notes

  • The exact set of fields can vary by source and by tariff.
  • TenderLink can be replaced with a payment/access URL if the account does not have enough access.
  • mode=countries and mode=sources help build user interfaces with country and source filters.
  • For very large historical loads, a prepared dataset is usually more efficient than paging through the API.

Recommended integration workflow

  • Create and test a search query on the website or through /api/export?kwords=...
  • Add filters: country c{id}=1, source e{id}=1, dates, price range and minus keywords.
  • Request the first page and read Total where the format provides it.
  • Paginate with page=2, page=3 and so on.
  • Store TenderInfo ID as a stable key in your local database.
  • Use ApiTenderLink or id=... to refresh a particular tender later.

JSON response example

[{"ID":"71989101","Date_publ":"2026-07-08","TenderName":"Construction materials supply","Buyer":"City procurement department","Country":"United States","Country_ID":"15","Price":"250000","Currency":"USD","Deadline":"2026-08-05","Published_In":"public procurement portal","TenderLinkInner":"https://www.tenderinfo.org/tender/71989101"}]

XML response example

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Items>
  <Total>1</Total>
  <Item>
    <ID>71989101</ID>
    <Date_publ>2026-07-08</Date_publ>
    <TenderName>Construction materials supply</TenderName>
    <Country>United States</Country>
    <Deadline>2026-08-05</Deadline>
  </Item>
</Items>

FAQ

Is this API only for tenders?

This page documents only tender search/export. Other TenderInfo sections are intentionally not included here.

Can I filter by country and source?

Yes. Use mode=countries and mode=sources to get identifiers, then pass c{id}=1 or e{id}=1.

Can I use the API for AI training?

For large AI training sets, a prepared dataset or daily file feed is usually more convenient than live API pagination.