{"openapi":"3.1.0","info":{"title":"Ukraine Prozorro Tender Watch API","version":"0.1.0","description":"Ukraine Prozorro Tender Watch reads the public Prozorro (OpenProcurement) tender feed, which needs no key. list_recent_tenders shows the newest tenders with status, procurement method, buyer and submission period, and can filter by region, status and method. get_tender returns one tender's title, value, CPV items, periods and document links. watch_since_cursor returns tenders changed since a...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://ua-prozorro-watch.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/ua-prozorro-watch/docs"},"termsOfService":"https://connectorbay.com/ua-prozorro-watch/terms"},"servers":[{"url":"https://ua-prozorro-watch.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/ua-prozorro-watch/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_recent_tenders":{"post":{"operationId":"list_recent_tenders","summary":"List the newest tenders of the public Prozorro feed with status, method, buyer and submission period, optionally filtere","description":"List the newest tenders of the public Prozorro feed with status, method, buyer and submission period, optionally filtered by region, status or method. Use for \"What tenders were published in Ukraine most recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":20,"description":"How many feed entries to read, 1 to 100 (default 20)","title":"Limit"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional text to find in the buyer's region (Ukrainian names, for example Львівська or Київ)","title":"Region"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional tender status to keep, for example active.tendering","title":"Status"},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional procurement method type to keep, for example aboveThresholdUA or belowThreshold","title":"Method"},"detail":{"default":"summary","description":"'summary' (default): compact feed rows (id, tender number, status, method, modified date, buyer name and region, submission end); 'full': complete feed rows with created date, buyer identifier, kind, locality, country and the whole submission period","enum":["summary","full"],"title":"Detail","type":"string"}},"title":"list_recent_tendersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_tender":{"post":{"operationId":"get_tender","summary":"Fetch one tender: title, status, value, CPV items, periods, buyer and document links (no bidder, award or contact data).","description":"Fetch one tender: title, status, value, CPV items, periods, buyer and document links (no bidder, award or contact data). Use for \"Show me the details and documents of this Prozorro tender\", \"Find recent tenders for road repair with CPV 45 and a value under 5 million hryvnia\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tender_id":{"description":"The 32-character hexadecimal tender id from the feed (not the UA-... tender number)","title":"Tender Id","type":"string"}},"required":["tender_id"],"title":"get_tenderArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/watch_since_cursor":{"post":{"operationId":"watch_since_cursor","summary":"Return tenders changed since a saved feed cursor or a start date, and the next cursor to save, for a weekly run. Use for","description":"Return tenders changed since a saved feed cursor or a start date, and the next cursor to save, for a weekly run. Use for \"Which tenders changed since my last weekly check\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"since":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Start date YYYY-MM-DD for a first run (feed entries modified from that day, UTC); ignored when cursor is given","title":"Since"},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The next_cursor returned by the previous run; use it exactly as given","title":"Cursor"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum entries to return, 1 to 100 (default 20 with detail=summary, 50 with detail=full)","title":"Limit"},"detail":{"default":"summary","description":"'summary' (default): compact feed rows (id, tender number, status, method, modified date, buyer name and region, submission end); 'full': complete feed rows with created date, buyer identifier, kind, locality, country and the whole submission period","enum":["summary","full"],"title":"Detail","type":"string"}},"title":"watch_since_cursorArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/match_tenders":{"post":{"operationId":"match_tenders","summary":"Scan a bounded window of the newest tenders and keep those matching keywords, a CPV prefix and a value band. Use for \"Fi","description":"Scan a bounded window of the newest tenders and keep those matching keywords, a CPV prefix and a value band. Use for \"Find recent tenders for road repair with CPV 45 and a value under 5 million hryvnia\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"keywords":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"default":null,"description":"Words to look for in the title and description (any match keeps the tender); Ukrainian or English","title":"Keywords"},"cpv_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional CPV code prefix of the items, digits only, for example 45 or 4523","title":"Cpv Prefix"},"min_value":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional minimum expected value in the tender currency, decimal string","title":"Min Value"},"max_value":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional maximum expected value in the tender currency, decimal string","title":"Max Value"},"window":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":40,"description":"How many of the newest feed entries to scan, 1 to 100 (default 40)","title":"Window"},"max_details":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":15,"description":"Maximum detail requests to make, 1 to 30 (default 15)","title":"Max Details"}},"title":"match_tendersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/tender_deadlines":{"post":{"operationId":"tender_deadlines","summary":"Work out a tender's submission and enquiry deadlines and the days left on a stated date. Use for \"When is the deadline t","description":"Work out a tender's submission and enquiry deadlines and the days left on a stated date. Use for \"When is the deadline to submit a bid for this tender and how many days are left\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tender_id":{"description":"The 32-character hexadecimal tender id","title":"Tender Id","type":"string"},"on_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Date YYYY-MM-DD to count days from (default: today, stated in the answer)","title":"On Date"}},"required":["tender_id"],"title":"tender_deadlinesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/procuring_entity_profile":{"post":{"operationId":"procuring_entity_profile","summary":"Summarise the buying organisation of a tender: name, registry identifier, kind and region (entity level only). Use for \"","description":"Summarise the buying organisation of a tender: name, registry identifier, kind and region (entity level only). Use for \"Who is the buyer of this tender\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tender_id":{"description":"The 32-character hexadecimal tender id","title":"Tender Id","type":"string"}},"required":["tender_id"],"title":"procuring_entity_profileArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}