SwarmIncToolsAPIsFree LLM APIsSupport

REST API · JSON · through RapidAPI

EU Public Tender Monitor (TED) API

New public procurement notices from the EU's official TED search API for a CPV code prefix, buyer country and keyword, returning only the notices that are new or changed since your last run.

Read from the official source when you call (api.ted.europa.eu); no personal data. GET /v1/ted-tender-monitor answers {"product", "count", "items", "fetched_at"}.

Get a key on RapidAPI  plans and pricing are on the listing; one key covers every endpoint.

Parameters

ParameterTypeWhat it doesExample
cpv_prefixstringStart of the CPV code to follow (for example 72 for IT services, 45 for construction, 33 for medical equipment)."72"
countrystringCountry of the buying organisation, as a three-letter ISO code. One of: AUT, BEL, BGR, HRV, CYP, CZE, DNK, EST, FIN, FRA, DEU, GRC, HUN, IRL, ITA, LVA, LTU, LUX, MLT, NLD, POL, PRT, ROU, SVK, SVN, ESP, SWE, NOR, ISL."FRA"
keywordstringOptional word that the notice title must contain. Leave empty to keep all notices."services"
published_sincestringOnly notices published on or after this date, written YYYYMMDD."20250101"
limitintegerAt most this many results (1–1000, default 100).20

What each result holds

FieldType
notice_idid
publication_datedate
buyertext
country_codetext
titletext
cpv_codeslist
proceduretext
deadlinedate
estimated_valuenumber
currencytext
urlurl

Call it

With curl:

curl -G "https://clinical-trials-eu-tenders-open-data-api.p.rapidapi.com/v1/ted-tender-monitor" \
  --data-urlencode cpv_prefix=72 \
  --data-urlencode country=FRA \
  --data-urlencode keyword=services \
  --data-urlencode published_since=20250101 \
  --data-urlencode limit=20 \
  -H "X-RapidAPI-Key: $RAPIDAPI_KEY" \
  -H "X-RapidAPI-Host: clinical-trials-eu-tenders-open-data-api.p.rapidapi.com"

With Python (pip install requests):

import os, requests

r = requests.get(
    "https://clinical-trials-eu-tenders-open-data-api.p.rapidapi.com/v1/ted-tender-monitor",
    params={'cpv_prefix': '72',
 'country': 'FRA',
 'keyword': 'services',
 'published_since': '20250101',
 'limit': 20},
    headers={"X-RapidAPI-Key": os.environ["RAPIDAPI_KEY"], "X-RapidAPI-Host": "clinical-trials-eu-tenders-open-data-api.p.rapidapi.com"},
    timeout=120,
)
for item in r.json()["items"]:
    print(item)

For code and AI agents that pick tools at run time, GET /v1/products lists every endpoint with its parameters and fields.

Questions

How fresh is it? Each call reads the official source then; an identical query within 15 minutes is answered from a cache.

What if the source is down? The answer says so: a 502, or "partial": true when only some of its requests failed.