{
  "openapi": "3.0.1",
  "info": {
    "title": "EU Public Tenders Monitor - TED & BOAMP (Only New)",
    "description": "Monitor public procurement notices from TED (all EU countries) and BOAMP (France) by keyword, country, CPV code, deadline and value. One clean schema, official source links, optional mode that returns only notices you have not received before. No personal data.",
    "version": "0.1",
    "x-build-id": "Jq6VZoPTPR0mfwBeb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/far003~eu-public-tenders/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-far003-eu-public-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/far003~eu-public-tenders/runs": {
      "post": {
        "operationId": "runs-sync-far003-eu-public-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/far003~eu-public-tenders/run-sync": {
      "post": {
        "operationId": "run-sync-far003-eu-public-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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keep notices that mention at least one of these words or phrases (any of). Both sources match them anywhere in the notice text (TED with its full-text search, BOAMP in the title and the whole body), so use the language of the notices you want: \"cybersecurity\", \"software development\" for TED, \"logiciel\" for the French BOAMP. Quotes, brackets and wildcards are ignored. Empty = no keyword filter.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Buyer countries",
            "type": "array",
            "description": "Only notices published by buyers in these countries. Two-letter or three-letter ISO codes or English names: IT, ITA, Italy, FR, Germany, UK. TED notices are filtered by the buyer's country. BOAMP only covers France, so it is read only when France is on the list (or the list is empty). Empty = all countries.",
            "items": {
              "type": "string"
            }
          },
          "cpvCodes": {
            "title": "CPV codes",
            "type": "array",
            "description": "Common Procurement Vocabulary codes of the subject: 72000000 (IT services), 45214200 (school building works), 34100000 (motor vehicles). With or without the check digit (72000000-5). A code covers its whole branch: 72000000 also finds 72212000 (software development services), and a short prefix works too: 45 = all construction. A notice matches if any of its lots has one of the codes. BOAMP notices carry a CPV code only in some formats; those without one cannot match a CPV filter. Empty = all subjects.",
            "items": {
              "type": "string"
            }
          },
          "noticeTypes": {
            "title": "Notice types",
            "type": "array",
            "description": "Which kinds of notice to return. tender = contract notices and calls for competition (the opportunities to bid on). award = contract award notices (who won, for how much). planning = prior information notices (upcoming tenders). modification = contract modifications. other = corrections, cancellations, qualification systems, voluntary ex-ante and the like. Default: tender.",
            "items": {
              "type": "string",
              "enum": [
                "tender",
                "award",
                "planning",
                "modification",
                "other"
              ],
              "enumTitles": [
                "Tenders (contract notices)",
                "Contract awards",
                "Planning (prior information)",
                "Contract modifications",
                "Other (corrections, cancellations...)"
              ]
            },
            "default": [
              "tender"
            ]
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "TED = Tenders Electronic Daily, the EU journal for public procurement above the EU thresholds, all EU countries plus EEA, UK and Switzerland. BOAMP = the French official bulletin, which also carries the smaller French contracts (below 90,000 EUR) that never reach TED. A French tender published on both is delivered once.",
            "items": {
              "type": "string",
              "enum": [
                "ted",
                "boamp"
              ],
              "enumTitles": [
                "TED (EU)",
                "BOAMP (France)"
              ]
            },
            "default": [
              "ted",
              "boamp"
            ]
          },
          "publishedLastDays": {
            "title": "Published in the last N days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Publication window ending today (today counts as day 1): 7 = the last seven days including today. TED publishes on working days only, and a notice appears on TED some days after the buyer sends it, so for a scheduled monitor use 3 or more together with \"Only new notices\". Ignored for the side of the window you set below.",
            "default": 7
          },
          "publishedFrom": {
            "title": "Published from (date)",
            "type": "string",
            "description": "First publication date to include, YYYY-MM-DD. Overrides \"Published in the last N days\" for the start of the window."
          },
          "publishedTo": {
            "title": "Published until (date)",
            "type": "string",
            "description": "Last publication date to include, YYYY-MM-DD. Empty = today."
          },
          "minDaysToDeadline": {
            "title": "Deadline at least N days away",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep tenders whose deadline is at least this many days from today (0 = not yet expired), so you only get tenders you still have time to answer. The deadline is the one for offers or, in restricted and negotiated procedures, for requests to participate; with several lots or stages the latest counts. Notices with no deadline (awards, planning notices) are left out when this is set."
          },
          "deadlineFrom": {
            "title": "Deadline on or after (date)",
            "type": "string",
            "description": "Keep tenders whose deadline (for offers or for requests to participate) is on or after this date, YYYY-MM-DD. If you also set \"Deadline at least N days away\", the later of the two dates applies."
          },
          "estimatedValueMin": {
            "title": "Estimated value at least (EUR)",
            "minimum": 0,
            "type": "number",
            "description": "Keep notices whose estimated value (awarded value for award notices) is at least this amount in euro. Values stated in another currency are not converted: they count as unknown. Many notices state no value at all."
          },
          "estimatedValueMax": {
            "title": "Estimated value at most (EUR)",
            "minimum": 0,
            "type": "number",
            "description": "Keep notices whose estimated value is at most this amount in euro."
          },
          "includeUnknownValue": {
            "title": "Keep notices with unknown value",
            "type": "boolean",
            "description": "With a value filter on: also deliver the notices that state no value, or one in a currency other than euro. You are charged for them.",
            "default": false
          },
          "maxResultsPerSource": {
            "title": "Max notices per source",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Deliver at most this many notices from each source (newest first). With two sources the total can be twice this number. This is the main control of what a run can cost.",
            "default": 100
          },
          "onlyNew": {
            "title": "Only new notices",
            "type": "boolean",
            "description": "Return only notices you have not received in an earlier run with the same Feed name, and charge only for those. Schedule the Actor and each run gives you just what appeared since the last one. A notice is remembered once delivered; notices left out by \"Max notices per source\" or by your spending limit stay new for the next run. The first run delivers (and charges) every matching notice, unless you also turn on \"Skip existing notices on the first run\".",
            "default": false
          },
          "baselineOnFirstRun": {
            "title": "Skip existing notices on the first run",
            "type": "boolean",
            "description": "With \"Only new notices\" on: the first run for a Feed name only records the notices that match now and delivers nothing (and charges nothing). Later runs deliver only what appeared after that.",
            "default": false
          },
          "stateKey": {
            "title": "Feed name",
            "type": "string",
            "description": "Name of the memory used by \"Only new notices\". Use a different name for each independent feed (one per client or per filter set): a new name starts a new feed with its own first run. Letters, digits, _ and - only.",
            "default": "default"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}