tenderapi-eu Organisations API

The Organisations API from tenderapi-eu — 3 operation(s) for organisations.

Operations 3

POST /organisations/search Search organisations #
GET /organisations/{id} Get organisation #
GET /organisations/{id}/tenders Organisation tenders #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/tenderapi-eu:tenderapi-eu-organisations-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

tenderapi-eu-organisations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Tender Organisations API
  version: '1.0'
  description: 'REST API for European public tenders from TED and national procurement portals.


    New values can be added to enums in responses (for example new portals), so handle unknown values.


    Guides, code examples and plan limits: https://docs.tenderapi.eu'
  contact:
    url: https://tenderapi.eu
  termsOfService: https://tenderapi.eu/terms/
servers:
- url: https://api.tenderapi.eu/api/v1
security:
- apiKey: []
tags:
- name: Organisations
paths:
  /organisations/search:
    post:
      tags:
      - Organisations
      operationId: searchOrganisations
      summary: Search organisations
      description: Find buyers and suppliers by name and country. Results are ordered from oldest to newest organisation.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchOrganisationsRequest'
            example:
              name: Ministry of Health
              countries:
              - SVN
              limit: 10
      responses:
        '200':
          description: One page of matching organisations.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-Quota-Limit:
              $ref: '#/components/headers/X-Quota-Limit'
            X-Quota-Remaining:
              $ref: '#/components/headers/X-Quota-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganisationList'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
  /organisations/{id}:
    get:
      tags:
      - Organisations
      operationId: getOrganisation
      summary: Get organisation
      description: 'Fetch one organisation by id. Duplicates of the same organisation are merged, so requesting an old id

        returns the merged organisation and the returned `id` can differ from the requested one. Store the returned `id`.'
      parameters:
      - $ref: '#/components/parameters/OrganisationID'
      responses:
        '200':
          description: The organisation.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-Quota-Limit:
              $ref: '#/components/headers/X-Quota-Limit'
            X-Quota-Remaining:
              $ref: '#/components/headers/X-Quota-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Organisation'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
  /organisations/{id}/tenders:
    get:
      tags:
      - Organisations
      operationId: getOrganisationTenders
      summary: Organisation tenders
      description: 'List the tenders an organisation is involved in, as a buyer, a winner, or both.

        Needs a Starter or Business plan; the free plan gets `403 PLAN_UPGRADE_REQUIRED`.'
      parameters:
      - $ref: '#/components/parameters/OrganisationID'
      - name: roles
        in: query
        description: Only tenders where the organisation has these roles. Repeat for both, e.g. `?roles=buyer&roles=winner`. Default is both.
        schema:
          type: array
          items:
            type: string
            enum:
            - buyer
            - winner
      - name: sortBy
        in: query
        schema:
          $ref: '#/components/schemas/TenderSortBy'
      - name: sortOrder
        in: query
        schema:
          $ref: '#/components/schemas/SortOrder'
      - $ref: '#/components/parameters/Limit'
      - name: cursor
        in: query
        description: '`nextCursor` from the previous page.'
        schema:
          type: string
      responses:
        '200':
          description: One page of the organisation's tenders.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-Quota-Limit:
              $ref: '#/components/headers/X-Quota-Limit'
            X-Quota-Remaining:
              $ref: '#/components/headers/X-Quota-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenderList'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/PlanUpgradeRequired'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  responses:
    Unauthorized:
      description: Missing or invalid API key.
    NotFound:
      description: Resource not found.
    TooManyRequests:
      description: Rate limit exceeded.
    PlanUpgradeRequired:
      description: Upgrade plan required.
    BadRequest:
      description: Invalid request.
    InternalError:
      description: Server error.
  schemas:
    EstimatedValue:
      type: object
      properties:
        value:
          type: number
        currency:
          type: string
        valueEur:
          type: number
      required:
      - value
      - currency
      - valueEur
    PageInfo:
      type: object
      properties:
        nextCursor:
          type: string
        total:
          type: object
          properties:
            count:
              type: integer
            capped:
              type: boolean
          required:
          - count
          - capped
      required:
      - nextCursor
      - total
    TenderSortBy:
      type: string
      enum:
      - publicationDate
      - deadline
      - estimatedValue
    OrganisationList:
      type: object
      properties:
        organisations:
          type: array
          items:
            $ref: '#/components/schemas/Organisation'
        page:
          $ref: '#/components/schemas/PageInfo'
      required:
      - organisations
      - page
    SortOrder:
      type: string
      enum:
      - asc
      - desc
    TenderDetail:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        abstract:
          type: string
        status:
          type: string
        serviceType:
          type: string
        source:
          type: string
        publicationDate:
          type: string
        deadline:
          type: string
        deadlineHasTime:
          type: boolean
        buyer:
          $ref: '#/components/schemas/Organisation'
        cpvCodes:
          type: array
          items:
            type: string
        estimatedValue:
          $ref: '#/components/schemas/EstimatedValue'
        link:
          type: string
        winners:
          type: array
          items:
            $ref: '#/components/schemas/Organisation'
      required:
      - id
      - title
      - status
      - serviceType
      - source
      - publicationDate
      - deadline
      - deadlineHasTime
      - buyer
      - cpvCodes
      - estimatedValue
      - link
    TenderList:
      type: object
      properties:
        tenders:
          type: array
          items:
            $ref: '#/components/schemas/TenderDetail'
        page:
          $ref: '#/components/schemas/PageInfo'
      required:
      - tenders
      - page
    Limit:
      type: integer
      description: Number of items per page.
      default: 10
    SearchOrganisationsRequest:
      type: object
      properties:
        name:
          type: string
        countries:
          type: array
          items:
            type: string
        limit:
          type: integer
      required:
      - name
    Organisation:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        country:
          type: string
      required:
      - id
      - name
      - country
  headers:
    X-RateLimit-Reset:
      description: Seconds until the rate limit resets.
      schema:
        type: integer
    X-RateLimit-Remaining:
      description: Remaining requests in the current minute.
      schema:
        type: integer
    X-RateLimit-Limit:
      description: Requests allowed per minute.
      schema:
        type: integer
    X-Quota-Limit:
      description: Total quota for the month.
      schema:
        type: integer
    X-Quota-Remaining:
      description: Remaining quota for the month.
      schema:
        type: integer
  parameters:
    OrganisationID:
      name: id
      in: path
      required: true
      schema:
        type: string
        format: uuid
      example: 0192a6b4-51e2-7c3f-8d90-4a1b2c3d4e5f
    Limit:
      name: limit
      in: query
      schema:
        $ref: '#/components/schemas/Limit'
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: 'API key from the dashboard (https://dash.tenderapi.eu/api-keys), sent as `Authorization: Bearer tapi_...`.'