--- url: https://docs.tenderapi.eu/getting-started.md description: >- Base URL, request format and your first call to the TenderAPI REST API for EU public tenders. Free while in beta, no API key. --- # Getting Started TenderAPI collects public tenders from [TED](https://ted.europa.eu) and national procurement portals across Europe, cleans them up, and serves them through one REST API. You can search tenders, look up a single tender, and find the organisations that buy or win contracts. **The API is free to use while in beta. No API key or sign-up is needed.** Field names and behaviour may still change, so check back here now and then. ## Base URL ``` https://api.tenderapi.eu ``` All endpoints live under `/api/v1`. Every request and response uses JSON. * Search endpoints are `POST` requests with a JSON body. Send the header `Content-Type: application/json`. * Single item endpoints are `GET` requests with the id in the URL. ## Your first request Fetch five recent tenders from Irish buyers. ::: code-group ```bash [cURL] curl -X POST https://api.tenderapi.eu/api/v1/tenders/search \ -H "Content-Type: application/json" \ -d '{"buyerCountries": ["IRL"], "limit": 5}' ``` ```python [Python] import requests res = requests.post( "https://api.tenderapi.eu/api/v1/tenders/search", json={"buyerCountries": ["IRL"], "limit": 5}, ) for tender in res.json()["tenders"]: print(tender["title"], tender["link"]) ``` ```ts [TypeScript] const res = await fetch("https://api.tenderapi.eu/api/v1/tenders/search", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ buyerCountries: ["IRL"], limit: 5 }), }); const data = await res.json(); for (const tender of data.tenders) { console.log(tender.title, tender.link); } ``` ::: The response has a `tenders` list and a `page` object. Here it is cut to one tender: ```json { "tenders": [ { "id": "01a081e3-88a2-7089-b004-c05ce794265e", "title": "Contract for Housing First for Tenancy Support and Property Sourcing Services -Lot 1", "abstract": "Provision of Housing First tenancy support and Property Sourcing services", "status": "awarded", "serviceType": "services", "source": "ted", "publicationDate": "2026-09-04T00:00:00Z", "deadline": null, "deadlineHasTime": false, "buyer": { "name": "Dublin City Council", "country": "IRL" }, "cpvCodes": ["85310000", "85311000", "85320000", "98000000", "85000000", "85300000"], "estimatedValue": { "value": 4838930, "currency": "EUR", "valueEur": 4838930 }, "link": "https://ted.europa.eu/en/notice/-/detail/609885-2026" } ], "page": { "nextCursor": "eyJkIjoiMjAyNi0wOS0wNCIsImlkIjoiMDFhMDgxZTMtODhhMi03MDg5LWIwMDQtYzA1Y2U3OTQyNjVlIiwicSI6IjE0ZjI5YzM0YTdiMSJ9", "total": { "count": 14, "capped": false } } } ``` The full list of fields is on the [Search Tenders](/search-tenders#response) page. To get the next five results, send the same request again with `cursor` set to `nextCursor`. See [Pagination](/pagination). ## Endpoints | Method | Path | Description | |---|---|---| | `POST` | `/api/v1/tenders/search` | [Search Tenders](/search-tenders) | | `GET` | `/api/v1/tenders/{id}` | [Get Tender](/get-tender) | | `POST` | `/api/v1/organisations/search` | [Search Organisations](/search-organisations) | | `GET` | `/api/v1/organisations/{id}` | [Get Organisation](/get-organisation) | | `GET` | `/api/v1/organisations/{id}/tenders` | [Organisation Tenders](/organisation-tenders) | ## Common values ### Country codes Countries use three letter [ISO 3166-1 alpha-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3) codes, for example `DEU` for Germany, `FRA` for France and `SVN` for Slovenia. Two letter codes like `DE` are rejected. Kosovo, which has no official ISO code, uses `XKX`. ### CPV codes Tenders are classified with [Common Procurement Vocabulary (CPV)](https://simap.ted.europa.eu/cpv) codes. A CPV code is 8 digits and describes what is being bought. Filtering by a code also matches all codes below it, so `45000000` (construction work) includes `45233000` (road works). Find the right code for your sector with our [CPV code search](https://tenderapi.eu/en/tools/cpv/). ### Dates Dates in requests and responses use ISO 8601, for example `2025-03-15T00:00:00Z`. Publication dates are day precision, so their time part is always midnight UTC. Deadlines are returned in UTC and carry the hour when the portal publishes one, and `deadlineHasTime` is `true`. When a portal gives only a day, the deadline is the end of that day in the portal's local time and `deadlineHasTime` is `false`. ## Limits There are no enforced rate limits during beta. Please keep requests reasonable, and use `limit` and cursors instead of pulling the same data repeatedly. ## Next steps * [Search Tenders](/search-tenders) lists every filter you can use. * [Pagination](/pagination) explains how to walk through large result sets. * [Portals](/portals) shows where the data comes from and how to filter by portal. * [Errors](/errors) explains the error format.