{
  "openapi": "3.0.1",
  "info": {
    "title": "EU + UK Public Tenders Feed (Unofficial)",
    "description": "Public tenders from the EU's TED and UK Contracts Finder in one schema, from official keyless APIs. Filter by date, keyword, CPV, country, region, value and notice kind. Change tracking. Not affiliated with the EU Publications Office or Crown Commercial Service.",
    "version": "0.1",
    "x-build-id": "Ruuwrgu2eJEoR1vhg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/graylabs~eu-uk-tenders/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-graylabs-eu-uk-tenders",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/graylabs~eu-uk-tenders/runs": {
      "post": {
        "operationId": "runs-sync-graylabs-eu-uk-tenders",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/graylabs~eu-uk-tenders/run-sync": {
      "post": {
        "operationId": "run-sync-graylabs-eu-uk-tenders",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Which official sources to query. Both are public and need no account or key: TED (EU tenders, Search API) and UK Contracts Finder (OCDS API).",
            "items": {
              "type": "string",
              "enum": [
                "ted",
                "contracts_finder"
              ],
              "enumTitles": [
                "TED (EU)",
                "UK Contracts Finder"
              ]
            },
            "default": [
              "ted",
              "contracts_finder"
            ]
          },
          "lastNDays": {
            "title": "Last N days",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Notices published in the last N days (UTC), including today. Default 3. Ignored if you set a published-from or published-to date. Maximum 90."
          },
          "publishedFrom": {
            "title": "Published from (YYYY-MM-DD)",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Start of the publication window (UTC, inclusive)."
          },
          "publishedTo": {
            "title": "Published to (YYYY-MM-DD)",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "End of the publication window (UTC, inclusive). Defaults to today."
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Match any of these words or phrases. TED searches the full notice text; Contracts Finder rows are matched on title and description.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "cpvCodes": {
            "title": "CPV codes",
            "type": "array",
            "description": "8-digit CPV codes, e.g. 72000000 (IT services). Broader codes include their sub-codes (72000000 matches 72220000).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Buyer countries (ISO 3-letter)",
            "type": "array",
            "description": "E.g. DEU, FRA, IRL. Applies to TED. Contracts Finder is UK-only, so it is skipped unless the list is empty or includes GBR.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "nutsCodes": {
            "title": "NUTS regions (TED only)",
            "type": "array",
            "description": "NUTS code prefixes for the buyer or place of performance, e.g. DE2 or FR10. Applies to TED rows only.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "ukRegions": {
            "title": "UK regions (Contracts Finder only)",
            "type": "array",
            "description": "Contracts Finder delivery regions, e.g. London, North East, Scotland. Exact names, case-insensitive. Applies to Contracts Finder rows only; many notices have no region.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "noticeKinds": {
            "title": "Notice kinds",
            "type": "array",
            "description": "planning (prior information), tender (open opportunities), award (results), other (corrections, modifications). Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "planning",
                "tender",
                "award",
                "other"
              ],
              "enumTitles": [
                "Planning",
                "Tender (open opportunity)",
                "Award (result)",
                "Other"
              ]
            },
            "default": []
          },
          "minValue": {
            "title": "Minimum estimated value",
            "minimum": 0,
            "type": "integer",
            "description": "In the notice's own currency (no conversion). Notices without an estimated value are excluded when a value filter is set."
          },
          "maxValue": {
            "title": "Maximum estimated value",
            "minimum": 0,
            "type": "integer",
            "description": "In the notice's own currency (no conversion)."
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Stop after saving this many notices (each saved notice is one charged result).",
            "default": 100
          },
          "maxRequestsPerSource": {
            "title": "Maximum requests per source",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Safety cap on API calls per source per run (TED returns up to 250 notices per call, Contracts Finder 100).",
            "default": 60
          },
          "includeSuppliers": {
            "title": "Include supplier / winner organisations",
            "type": "boolean",
            "description": "Off by default. When on, award notices list winning organisations only. Names that may belong to individuals are withheld and counted.",
            "default": false
          },
          "includeDescriptions": {
            "title": "Include descriptions",
            "type": "boolean",
            "description": "Off by default. Adds the notice's free-text description (up to 10,000 characters), in the original language.",
            "default": false
          },
          "trackChanges": {
            "title": "Track changes between runs",
            "type": "boolean",
            "description": "Mark each notice new, updated or unchanged compared with earlier runs of the same search.",
            "default": false
          },
          "onlyNewOrUpdated": {
            "title": "Only new or updated notices",
            "type": "boolean",
            "description": "With change tracking, skip notices already seen unchanged (they are not charged).",
            "default": false
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}