{
  "openapi": "3.0.1",
  "info": {
    "title": "TED Tender Monitor — EU Procurement Alerts",
    "description": "TED tender monitor for new or changed EU public procurement notices. Filter by CPV, country, keyword, minimum value, or notice type and receive EU tender alerts as JSON or signed webhooks. Unofficial and not affiliated with TED, the EU, or its Publications Office.",
    "version": "0.1",
    "x-build-id": "bAWHzeH1D0TpLzSx4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/uplifted_novice_vbl~ted-tender-watch/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-uplifted_novice_vbl-ted-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/uplifted_novice_vbl~ted-tender-watch/runs": {
      "post": {
        "operationId": "runs-sync-uplifted_novice_vbl-ted-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/uplifted_novice_vbl~ted-tender-watch/run-sync": {
      "post": {
        "operationId": "run-sync-uplifted_novice_vbl-ted-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": {
          "sampleMode": {
            "title": "Free sample mode",
            "type": "boolean",
            "description": "Returns up to 10 of the newest matching TED notices through a bounded three-page, 120-second preview. Writes no monitor state and triggers no tender charges. Turn this off when you are ready to prime a saved monitor.",
            "default": true
          },
          "cpvCodes": {
            "title": "CPV code prefixes",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional 2–8 digit Common Procurement Vocabulary prefixes, for example 72 for IT or 45 for construction. Empty means every sector.",
            "items": {
              "type": "string",
              "pattern": "^[0-9]{2,8}$"
            },
            "default": []
          },
          "countries": {
            "title": "Buyer countries",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional ISO-3166 alpha-3 buyer country codes such as DEU, FRA, ESP. Empty means all countries.",
            "items": {
              "type": "string",
              "pattern": "^[A-Za-z]{3}$"
            },
            "default": []
          },
          "keywords": {
            "title": "Keywords or phrases",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional full-text terms, OR-matched by TED. Empty means no keyword clause. Each term is safely quoted in the expert query.",
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "default": []
          },
          "minValueEur": {
            "title": "Minimum procedure value (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Client-side minimum for known procedure-level EUR values. Notices with missing, ambiguous, or non-EUR values still pass with valueUnknown=true; this Actor never performs FX conversion or silently drops unknown values.",
            "default": 0
          },
          "noticeTypes": {
            "title": "TED notice types",
            "minItems": 1,
            "uniqueItems": true,
            "type": "array",
            "description": "Official TED notice-type codes. Defaults to competition notices. Legacy corr is accepted because it remains present in the live Search API.",
            "items": {
              "type": "string",
              "enum": [
                "brin-ecs",
                "brin-eeig",
                "can-desg",
                "can-modif",
                "can-social",
                "can-standard",
                "can-tran",
                "cn-desg",
                "cn-social",
                "cn-standard",
                "compl",
                "corr",
                "pin-buyer",
                "pin-cfc-social",
                "pin-cfc-standard",
                "pin-only",
                "pin-rtl",
                "pin-tran",
                "pmc",
                "qu-sy",
                "subco",
                "veat"
              ]
            },
            "default": [
              "cn-standard",
              "cn-social",
              "cn-desg"
            ]
          },
          "includeChangeNotices": {
            "title": "Include change and corrigendum notices",
            "type": "boolean",
            "description": "When enabled, the TED query automatically includes can-modif and legacy corr alongside your selected types, and delivers linked changes as separately billed changed-tender events.",
            "default": true
          },
          "lookbackDays": {
            "title": "Minimum overlap window (days)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Overlap floor for late publication. The Actor automatically extends this to the real gap since the last successful run, plus one safety day, so weekly and fortnightly schedules remain covered.",
            "default": 3
          },
          "maxNewPerRun": {
            "title": "Maximum new tenders per run",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Billing and delivery ceiling. Overflow is explicit and deferred oldest-first without advancing past undelivered notices. Broad EU-wide filters should run daily or use a higher cap.",
            "default": 5000
          },
          "webhookUrl": {
            "title": "Signed webhook URL",
            "type": "string",
            "description": "Optional HTTP(S) endpoint. Receives one JSON array of delivered tender records after durable dataset and state delivery, with one initial attempt plus three bounded retries. Requires webhookSecret."
          },
          "webhookSecret": {
            "title": "Webhook HMAC secret",
            "type": "string",
            "description": "Required with webhookUrl. Used for the X-Watch-Signature HMAC-SHA256 header. Stored as a secret input value."
          },
          "stateKey": {
            "title": "State key override",
            "maxLength": 200,
            "type": "string",
            "description": "Optional advanced override for deliberately sharing monitor state. By default, state is isolated per Apify Task and filter set; changing filters starts a fresh prime run. Supplying the same stateKey to multiple Tasks intentionally overrides Task isolation."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}