{
  "openapi": "3.0.1",
  "info": {
    "title": "Open Tenders Daily – TED, BOAMP & UK Tenders",
    "description": "Monitor new public tenders from TED (EU), BOAMP (France) and UK portals: filters, open deadlines only, new-notices mode. Official sources, no personal data.",
    "version": "0.1",
    "x-build-id": "1VuiU2GJ5uJksdhuG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/shadow-tools~boamp-ted-open-tenders/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-shadow-tools-boamp-ted-open-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/shadow-tools~boamp-ted-open-tenders/runs": {
      "post": {
        "operationId": "runs-sync-shadow-tools-boamp-ted-open-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/shadow-tools~boamp-ted-open-tenders/run-sync": {
      "post": {
        "operationId": "run-sync-shadow-tools-boamp-ted-open-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 portals to query. TED = European Union notices (contracts above the EU thresholds). BOAMP = France, including contracts below the thresholds. UK = Contracts Finder and Find a Tender (open tenders only; off by default). Example: [\"TED\"] for the EU only. BOAMP is skipped when a CPV filter or a minimum value is used (it has neither), or when countries do not include FRA; UK is skipped when countries do not include GBR.",
            "items": {
              "type": "string",
              "enum": [
                "TED",
                "BOAMP",
                "UK"
              ]
            },
            "default": [
              "TED",
              "BOAMP"
            ]
          },
          "keywords": {
            "title": "Keywords",
            "maxItems": 20,
            "type": "array",
            "description": "List of words or phrases, a notice must contain any of them (OR), e.g. [\"software\", \"logiciel\", \"cloud\"]. A multi-word keyword is searched as an exact phrase; case, accents and plurals are largely handled. Notices exist in several languages, so add the translations. Maximum 20 keywords. Empty = no keyword filter.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "keywordScope": {
            "title": "Where to search keywords (TED)",
            "enum": [
              "fulltext",
              "title"
            ],
            "type": "string",
            "description": "Where TED looks for the keywords. \"fulltext\" (default, broad) also matches words that appear only in the contract details; \"title\" (precise) needs the word in the notice title, use it for common words such as \"application\". BOAMP always searches the subject of the contract. Example: \"title\".",
            "default": "fulltext"
          },
          "noticeTypes": {
            "title": "Notice types",
            "type": "array",
            "description": "List of eForms notice type codes, e.g. [\"cn-standard\"]. Default = notices you can still answer (calls for tenders, design contests); add award notices (can-standard, can-social) to follow who won contracts (competitor monitoring). BOAMP maps contract notices, awards, modifications, prior information and ex ante transparency; other types are ignored there.",
            "items": {
              "type": "string",
              "enum": [
                "cn-standard",
                "cn-social",
                "cn-desg",
                "pin-rtl",
                "can-standard",
                "can-social",
                "can-desg",
                "can-modif",
                "pin-only",
                "veat",
                "pmc"
              ],
              "enumTitles": [
                "Contract notice (call for tenders)",
                "Contract notice, social services",
                "Design contest notice",
                "Prior information, reduced time limits",
                "Contract award notice",
                "Contract award notice, social services",
                "Design contest result",
                "Modification notice",
                "Prior information notice",
                "Voluntary ex ante transparency",
                "Preliminary market consultation"
              ]
            },
            "default": [
              "cn-standard",
              "cn-social",
              "cn-desg"
            ]
          },
          "countries": {
            "title": "Buyer countries",
            "maxItems": 30,
            "type": "array",
            "description": "Buyer countries as a list of 3-letter ISO codes, e.g. [\"FRA\", \"DEU\", \"BEL\", \"ESP\", \"ITA\", \"POL\", \"GBR\"]. Maximum 30 codes. Empty = all countries.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "departments": {
            "title": "French départements (BOAMP)",
            "maxItems": 30,
            "type": "array",
            "description": "French département codes as a list (BOAMP only), e.g. [\"75\", \"69\", \"2A\", \"971\"]: 2 or 3 digits, or 2A/2B for Corsica. Maximum 30. Empty = all of France.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "cpvPrefixes": {
            "title": "CPV codes (prefixes)",
            "maxItems": 30,
            "type": "array",
            "description": "List of CPV code prefixes (2 to 8 digits), e.g. [\"72\", \"48\"] where 72 = IT services, 48 = software, 79 = business services. Maximum 30. Not available at BOAMP (it is then skipped). Empty = all sectors.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludedCpvPrefixes": {
            "title": "Excluded CPV codes",
            "maxItems": 30,
            "type": "array",
            "description": "Optional list of CPV prefixes (2 to 8 digits) to exclude, e.g. [\"45\", \"70\", \"71\"] where 45 = construction, 70 = real estate, 71 = architecture and engineering. Maximum 30. Empty by default: no sector excluded.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "minEstimatedValue": {
            "title": "Minimum estimated value (EUR, GBP for UK)",
            "minimum": 0,
            "maximum": 10000000000,
            "type": "integer",
            "description": "Minimum estimated contract value as an integer amount, e.g. 500000 (EUR for TED; pounds, GBP, for UK). 0 = no filter. With a value, notices published without an amount in that currency are dropped and BOAMP (no amounts) is skipped.",
            "default": 0
          },
          "onlyOpen": {
            "title": "Still-open tenders only",
            "type": "boolean",
            "description": "true (default) drops notices whose response deadlines have all passed; notices without a published deadline are kept. Set false to include closed tenders (use it together with award notice types).",
            "default": true
          },
          "sinceDays": {
            "title": "Published within (days)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Look back this many days from today, integer 1 to 90, e.g. 7. Keep it small (2 to 7) for fast runs; with onlyNew, 2 is enough for a daily schedule.",
            "default": 2
          },
          "onlyNew": {
            "title": "New notices only",
            "type": "boolean",
            "description": "true = return only notices never delivered before for these same filters (ideal for a daily schedule; state kept between runs). false (default) = return everything matching, which is what a one-off or agent call wants.",
            "default": false
          },
          "maxResults": {
            "title": "Maximum notices",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum notices returned per source, integer 1 to 5000, e.g. 20. Default 20; raise it only when the SUMMARY note says results were capped. A \"Maximum cost per run\" limit applies to the total across sources.",
            "default": 20
          },
          "language": {
            "title": "Title language",
            "enum": [
              "FRA",
              "ENG",
              "DEU",
              "SPA",
              "ITA",
              "NLD",
              "POL",
              "POR"
            ],
            "type": "string",
            "description": "Preferred language of titles and descriptions when a notice exists in several languages; 3-letter code, one of the listed values, e.g. \"ENG\" (falls back to English).",
            "default": "ENG"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}