{
  "openapi": "3.0.1",
  "info": {
    "title": "EU Tender Watch: TED Public Procurement Alerts & Deadlines",
    "description": "Get alerted when a new EU public tender matches your keywords, CPV codes or countries. Watches TED (Tenders Electronic Daily) for government contracts and RFPs, flags only what is new since your last run, and gives you the buyer, estimated value, deadline and days left to bid.",
    "version": "0.1",
    "x-build-id": "fIpC9bgQnF1DTpxuN"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jdepablos~eu-tender-watch/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jdepablos-eu-tender-watch",
        "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/jdepablos~eu-tender-watch/runs": {
      "post": {
        "operationId": "runs-sync-jdepablos-eu-tender-watch",
        "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/jdepablos~eu-tender-watch/run-sync": {
      "post": {
        "operationId": "run-sync-jdepablos-eu-tender-watch",
        "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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Words or phrases to look for in the full text of the notice, in any EU language (accents do not matter). Each one is matched as a phrase and a tender matches if it contains ANY of them. Example: \"software\", \"cybersecurity\", \"road maintenance\".",
            "items": {
              "type": "string"
            }
          },
          "cpvCodes": {
            "title": "CPV codes",
            "type": "array",
            "description": "Common Procurement Vocabulary codes. They are hierarchical: 72000000 (IT services) also matches 72212000 and every other code below it. You can type a prefix such as \"72\" or a full code with its check digit such as \"72000000-5\".",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Buyer countries",
            "type": "array",
            "description": "Country of the contracting authority, as ISO codes: ESP, DEU, FRA, ITA, POL, IRL... Two-letter codes (ES, DE) are converted for you. Empty means all countries that publish on TED.",
            "items": {
              "type": "string"
            }
          },
          "noticeTypes": {
            "title": "Notice types",
            "type": "array",
            "description": "Which calls for competition to watch. The default, contract notices, covers almost every open tender.",
            "items": {
              "type": "string",
              "enum": [
                "cn-standard",
                "cn-social",
                "cn-desg",
                "subco",
                "pin-cfc-standard",
                "pin-cfc-social",
                "qu-sy"
              ],
              "enumTitles": [
                "Contract notice (standard regime)",
                "Contract notice (social and other specific services)",
                "Design contest notice",
                "Subcontracting notice",
                "Prior information notice used as call for competition",
                "Prior information notice used as call for competition (social services)",
                "Qualification system notice"
              ]
            },
            "default": [
              "cn-standard"
            ]
          },
          "minDaysLeft": {
            "title": "Minimum days left to bid",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Hide tenders whose deadline is closer than this, because you would not have time to prepare an offer. It only filters what you see: it never creates a new watch and never triggers a charge. Closed tenders are always hidden.",
            "default": 0
          },
          "minValue": {
            "title": "Minimum estimated value (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Hide tenders with a published estimated value below this amount. Other currencies are converted with approximate rates for this filter only. About half of TED notices publish no value at all: those are kept, so this filter never hides a tender it cannot judge."
          },
          "maxTendersPerWatch": {
            "title": "Max tenders listed per watch",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Caps the full list (tenders). New tenders are listed first and the alert list (newTenders) is never cut. It limits what is shown, not what is watched.",
            "default": 100
          },
          "watches": {
            "title": "Watchlist (optional)",
            "type": "array",
            "description": "Up to 25 watches per run, each billed and tracked on its own. Each entry: {\"name\": \"IT Spain\", \"keywords\": [\"software\"], \"cpvCodes\": [\"72000000\"], \"countries\": [\"ESP\"], \"minDaysLeft\": 10, \"minValue\": 100000}. When this list is set, the keywords, CPV codes and countries above are ignored; notice types, minimum days, minimum value and the cap still apply to every watch unless the watch sets its own."
          },
          "monitorMode": {
            "title": "Monitor mode (internal)",
            "type": "boolean",
            "description": "For scheduled smoke tests: if TED is fully unavailable the run exits SUCCEEDED with a clear message and notifies monitorEmail; if every watch returns zero notices the run fails. Code faults always fail the run.",
            "default": false
          },
          "monitorEmail": {
            "title": "Monitor email (internal)",
            "type": "string",
            "description": "Email to notify (via apify/send-mail) when monitor mode detects that TED is unavailable."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}