{"openapi":"3.1.0","info":{"title":"Inteliwert read API","version":"1.0.0-beta","description":"Read-only access to the public tenders Inteliwert collects, each with a link to its official notice and the time it was last checked. Every route serves published sources only.\n\nData licences: notices keep their source's licence (the Bekanntmachungsservice publishes them under CC0 1.0). Statistics Inteliwert computes are CC BY 4.0 with the attribution “Inteliwert (Bandpey GmbH)”. Counts cover notices in covered sources, not the whole market.\n\nRequests are limited per client; over the limit the answer is `429 rate_limited` with `Retry-After`. Answers carry an ETag and `Cache-Control`; repeat a request with `If-None-Match` to get `304`.\n\nAccounts: `/v1/auth/*` and `/v1/account` serve the site's account pages. A browser reaches them only through https://inteliwert.com, which forwards its forms and the session cookie; they answer 404 while sign-in is off.\n\nBilling: `/v1/billing/*` serves the same account pages with the visitor's session, and Stripe calls `/v1/billing/webhook`. It answers 404 until billing is open.\n\nAI assistants: the same reads are an MCP server at `https://api.inteliwert.com/mcp` (Streamable HTTP, JSON-RPC over POST; anonymous and read-only) with the tools `search_opportunities`, `get_opportunity`, `get_statistics`, `find_matching_companies`, `get_company` and `about_inteliwert`. Its server card is `https://api.inteliwert.com/mcp/server-card`. The MCP endpoint is not a REST route, so it has no path below.","contact":{"name":"Inteliwert","email":"hello@inteliwert.com"}},"externalDocs":{"description":"The read API and the MCP server for assistants","url":"https://inteliwert.com/developers"},"x-mcp":{"endpoint":"https://api.inteliwert.com/mcp","transport":"streamable-http","server_card":"https://api.inteliwert.com/mcp/server-card","tools":["search_opportunities","get_opportunity","get_statistics","find_matching_companies","get_company","about_inteliwert"]},"servers":[{"url":"https://api.inteliwert.com"}],"paths":{"/v1/health":{"get":{"summary":"Health and the deployed commit","operationId":"health","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/search":{"get":{"summary":"Search published tenders and grants","description":"Full-text terms and filters; the query's own filters (a CPV division, a region, a status, a minimum value) are applied and echoed in `interpreted`. A word of at most four characters or typed in capitals matches whole words; reviewed synonyms are also searched and named in `interpreted.expanded`. `total` stops at 1,000 (`total_capped`). Anonymous answers are cached for 60 seconds.","operationId":"search","parameters":[{"name":"q","in":"query","description":"Free text, at most 500 characters.","schema":{"type":"string","maxLength":500}},{"name":"kind","in":"query","description":"Tender or grant.","schema":{"type":"string","enum":["tender","grant"]}},{"name":"status","in":"query","description":"Opportunity status.","schema":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]}},{"name":"cpv","in":"query","description":"CPV code prefixes (2 to 8 digits), comma separated.","schema":{"type":"string"}},{"name":"nuts","in":"query","description":"NUTS code prefixes, comma separated.","schema":{"type":"string"}},{"name":"topic","in":"query","description":"Topic id.","schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,63}$"}},{"name":"min_value_eur","in":"query","description":"Minimum published value in EUR.","schema":{"type":"integer","minimum":0}},{"name":"sort","in":"query","description":"`relevance` (the default with words), `updated` (the default without), `deadline` (upcoming first, then passed, none last) or `published` (newest first publication first).","schema":{"type":"string","enum":["relevance","updated","deadline","published"]}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}},{"name":"limit","in":"query","description":"Results per page.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"offset","in":"query","description":"Results to skip.","schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/search/answer":{"get":{"summary":"Search, with a short AI answer that cites the results","description":"The body of `/v1/search` for the same parameters, unchanged, plus `answer`: at most four sentences a language model writes from the top five results, each citing the result fields or passages it used (`answer.sources`, each with the opportunity's page, the official notice and `last_checked_at`). The answer is machine-generated and labelled so (`answer.label`); it is never an eligibility check, a ranking or a complete list. It says “Not found in the indexed documents.” when the results do not support an answer, and “AI answer not available right now.” (`status: unavailable`, with a `reason`) when it is switched off, the caller's AI credits are used up, or the model fails; the search part stays the same. One answer spends 1 AI credit, a cached answer none. Signed-in callers spend their account's credits; anonymous visitors 3 a day per IP address and pass Turnstile first (`Iwrt-Turnstile-Token`). `q` is required. Never cached by HTTP.","operationId":"search_answer","parameters":[{"name":"q","in":"query","description":"Free text, at most 500 characters.","schema":{"type":"string","maxLength":500},"required":true},{"name":"kind","in":"query","description":"Tender or grant.","schema":{"type":"string","enum":["tender","grant"]}},{"name":"status","in":"query","description":"Opportunity status.","schema":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]}},{"name":"cpv","in":"query","description":"CPV code prefixes (2 to 8 digits), comma separated.","schema":{"type":"string"}},{"name":"nuts","in":"query","description":"NUTS code prefixes, comma separated.","schema":{"type":"string"}},{"name":"topic","in":"query","description":"Topic id.","schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,63}$"}},{"name":"min_value_eur","in":"query","description":"Minimum published value in EUR.","schema":{"type":"integer","minimum":0}},{"name":"sort","in":"query","description":"`relevance` (the default with words), `updated` (the default without), `deadline` (upcoming first, then passed, none last) or `published` (newest first publication first).","schema":{"type":"string","enum":["relevance","updated","deadline","published"]}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}},{"name":"limit","in":"query","description":"Results per page.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"offset","in":"query","description":"Results to skip.","schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}},{"name":"Iwrt-Turnstile-Token","in":"header","description":"An anonymous visitor's Turnstile token (action `search_answer`); not needed with a session or for a cached answer.","schema":{"type":"string","maxLength":2048}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchAnswerResponse"}}}},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/suggest":{"get":{"summary":"Suggestions while typing","description":"Up to `limit` topics, CPV divisions, regions, synonym groups and buyers or funders whose words start with `q` (folded: ä matches a and ae, ß matches ss), each with its count of open published opportunities and the `/v1/search` parameters it stands for. From a dictionary built after each catalogue revision; empty when nothing matches.","operationId":"suggest","parameters":[{"name":"q","in":"query","description":"What has been typed, 2 to 64 characters.","schema":{"type":"string","minLength":2,"maxLength":64}},{"name":"lang","in":"query","description":"The suggestions' language.","schema":{"type":"string","enum":["en","de"],"default":"en"}},{"name":"limit","in":"query","description":"Most suggestions.","schema":{"type":"integer","minimum":1,"maximum":10,"default":8}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestResponse"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/opportunities/{opportunity_id}":{"get":{"summary":"One opportunity with everything its page shows","description":"Every field of `OpportunityPage`, plus older flat fields (`buyer_name`, `cpv_codes`, `deadline_at`, …). Unknown or unpublished ids are `404`.","operationId":"opportunities_opportunity_id","parameters":[{"name":"opportunity_id","in":"path","required":true,"description":"Opportunity id.","schema":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"}},{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpportunityPage"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/opportunities/{opportunity_id}/cards/{card}":{"get":{"summary":"An opportunity's sharing card or fact sheet as PNG","description":"The branded 1200 x 630 sharing card (`og.png`) or the 1600 x 900 fact sheet (`sheet.png`) of the current notice version, or of the version `v` (the page's `card_version`) when it belongs to the opportunity. With `v` the image never changes (`Cache-Control: public, max-age=31536000, immutable`); without, `public, max-age=3600`. `404` when the opportunity is unknown or unpublished or the card is not rendered.","operationId":"opportunities_opportunity_id_cards_card","parameters":[{"name":"opportunity_id","in":"path","required":true,"description":"Opportunity id.","schema":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"}},{"name":"card","in":"path","required":true,"description":"The image.","schema":{"type":"string","enum":["og.png","sheet.png"]}},{"name":"lang","in":"query","description":"Language of the image.","schema":{"type":"string","enum":["en","de"],"default":"en"}},{"name":"v","in":"query","description":"A notice version id of the opportunity (`card_version`).","schema":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"image/png":{"schema":{"type":"string","format":"binary"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/logos/{file}":{"get":{"summary":"A company's logo as PNG, from our own origin","description":"The logo the crawler fetched from the organisation's verified website (decision E-80), rasterised to a PNG of at most 512 px on its long side and named by the SHA-256 of its bytes, as an organisation's `logo.url` gives it. The name never changes its image (`Cache-Control: public, max-age=31536000, immutable`). Shown only to identify the organisation. `404` for a name that is not 64 lower-case hex characters and `.png`, an unknown logo, and one removed (on request, or because its website lost its verification).","operationId":"logos_file","parameters":[{"name":"file","in":"path","required":true,"description":"`<sha256>.png`.","schema":{"type":"string","pattern":"^[0-9a-f]{64}\\.png$"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"image/png":{"schema":{"type":"string","format":"binary"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/opportunities/{opportunity_id}/related":{"get":{"summary":"Published opportunities related by CPV division or region","operationId":"opportunities_opportunity_id_related","parameters":[{"name":"opportunity_id","in":"path","required":true,"description":"Opportunity id.","schema":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"}},{"name":"limit","in":"query","description":"Results.","schema":{"type":"integer","minimum":1,"maximum":12,"default":6}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelatedResponse"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/opportunities/{opportunity_id}/same-buyer":{"get":{"summary":"Other published opportunities of the same buyer","description":"Opportunities whose notices name the same buyer (or an organisation merged with it), the opportunity itself excluded: open ones whose deadline is still ahead first, then the most recently published. Empty when the notice names no buyer.","operationId":"opportunities_opportunity_id_same_buyer","parameters":[{"name":"opportunity_id","in":"path","required":true,"description":"Opportunity id.","schema":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"}},{"name":"limit","in":"query","description":"Results.","schema":{"type":"integer","minimum":1,"maximum":12,"default":5}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelatedResponse"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/opportunities/{opportunity_id}/matches":{"get":{"summary":"Possible matches: companies that might be able to deliver, from public evidence","description":"The fair top 5 and the list behind it (docs/specs/matching.md): SME-first, at most one established supplier in the top 5, a place for a company new to public tenders, every reason linked to its evidence. A possible match based on public information, never a judgement of eligibility, fit or chances.","operationId":"opportunities_opportunity_id_matches","parameters":[{"name":"opportunity_id","in":"path","required":true,"description":"Opportunity id.","schema":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"}},{"name":"limit","in":"query","description":"Matches.","schema":{"type":"integer","minimum":1,"maximum":20,"default":20}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpportunityMatches"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/organisations/{organisation_id}":{"get":{"summary":"A company's public profile: identity, track record, certifications, possible matches","description":"Only companies and public bodies on the legal-form allowlist have a profile; sole traders, natural persons and unclear legal forms read as not found (docs/specs/company-data.md scope 6). Certifications are labelled verified (register) or self-declared (the company's website).","operationId":"organisations_organisation_id","parameters":[{"name":"organisation_id","in":"path","required":true,"description":"Organisation id.","schema":{"type":"string","pattern":"^org_[0-9A-Z]{26}$"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyProfile"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/catalogue/companies":{"get":{"summary":"Company profiles worth indexing (an award, or a verified website with a self-description or a service), for sitemaps","operationId":"catalogue_companies","parameters":[{"name":"cursor","in":"query","description":"`next_cursor` of the previous page.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"}},{"name":"limit","in":"query","description":"Entries per page.","schema":{"type":"integer","minimum":1,"maximum":5000,"default":5000}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyIndex"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/catalogue/index":{"get":{"summary":"Published opportunities in id order, for sitemaps","operationId":"catalogue_index","parameters":[{"name":"cursor","in":"query","description":"`next_cursor` of the previous page.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"}},{"name":"limit","in":"query","description":"Entries per page.","schema":{"type":"integer","minimum":1,"maximum":5000,"default":5000}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogueIndex"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/stats/overview":{"get":{"summary":"Counts over published opportunities","description":"Statistics are CC BY 4.0 with the attribution “Inteliwert (Bandpey GmbH)”. They count notices in covered sources, not the whole market.","operationId":"stats_overview","parameters":[{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsOverview"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/stats/facets":{"get":{"summary":"Published opportunities per CPV division, region, kind or topic","description":"Opportunities first published in the range (Europe/Berlin days), the sum of their published values in EUR, and the opportunities open now, per key of the facet, from daily aggregates over published sources. Statistics are CC BY 4.0 with the attribution “Inteliwert (Bandpey GmbH)”. They count notices in covered sources, not the whole market.","operationId":"stats_facets","parameters":[{"name":"facet","in":"query","description":"The facet.","schema":{"type":"string","enum":["cpv_division","nuts1","kind","topic"]}},{"name":"from","in":"query","description":"First day (default: 89 days before `to`).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","description":"Last day (default: today in Europe/Berlin); at most 1,096 days after `from`.","schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","description":"Keys.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FacetsResponse"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/stats/series":{"get":{"summary":"One facet key's opportunities by first publication, per day, week or month","description":"Every period of the range is present, zero when nothing was published. With history reads on (`LAKE_READS`), a month series of a CPV division or a Land takes the months before the first month of the recent data from the history: each such point carries `source: \"history\"` and counts the month's contract notices and their published estimated values, and `history` says which months, from when, or that the history is not available right now; a month the recent data count is never taken from the history. Statistics are CC BY 4.0 with the attribution “Inteliwert (Bandpey GmbH)”.","operationId":"stats_series","parameters":[{"name":"facet","in":"query","description":"The facet.","schema":{"type":"string","enum":["cpv_division","nuts1","kind","topic"]}},{"name":"key","in":"query","description":"A CPV division (`72`), a German NUTS level-1 region (`DE3`), `tender` or `grant`, or a topic id.","schema":{"type":"string","maxLength":64}},{"name":"interval","in":"query","description":"Bucket: the day, the ISO week (its Monday) or the month.","schema":{"type":"string","enum":["day","week","month"],"default":"week"}},{"name":"from","in":"query","description":"First day (default: 89 days before `to`).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","description":"Last day (default: today in Europe/Berlin); at most 1,096 days after `from`.","schema":{"type":"string","format":"date"}},{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeriesResponse"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/stats/combinations":{"get":{"summary":"Open and first published opportunities per CPV division and German Land","description":"One row per pair of a CPV division and a NUTS level-1 region in Germany with an opportunity open now or first published in the range (Europe/Berlin days). An opportunity counts once in every pair its CPV and NUTS codes name, as `/v1/search` matches `cpv` and `nuts`. Published sources only. Statistics are CC BY 4.0 with the attribution “Inteliwert (Bandpey GmbH)”. They count notices in covered sources, not the whole market.","operationId":"stats_combinations","parameters":[{"name":"a","in":"query","description":"The first facet.","schema":{"type":"string","enum":["cpv_division"]}},{"name":"b","in":"query","description":"The second facet.","schema":{"type":"string","enum":["nuts1"]}},{"name":"from","in":"query","description":"First day (default: 89 days before `to`).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","description":"Last day (default: today in Europe/Berlin); at most 1,096 days after `from`.","schema":{"type":"string","format":"date"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CombinationsResponse"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/stats/top-buyers":{"get":{"summary":"The buyers with the most open opportunities under a hub's filters","description":"Open published opportunities matched as `/v1/search` with `status=open` matches `cpv`, `nuts` and `topic`, grouped by buyer (its organisation id, else its name): most open first. At least one filter is required. Statistics are CC BY 4.0 with the attribution “Inteliwert (Bandpey GmbH)”. They count notices in covered sources, not the whole market.","operationId":"stats_top_buyers","parameters":[{"name":"cpv_division","in":"query","description":"A CPV division (`45`).","schema":{"type":"string","pattern":"^\\d{2}$"}},{"name":"nuts1","in":"query","description":"A German NUTS level-1 region (`DE2`).","schema":{"type":"string","pattern":"^DE[0-9A-Z]$"}},{"name":"topic","in":"query","description":"A topic id.","schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,63}$"}},{"name":"limit","in":"query","description":"Buyers.","schema":{"type":"integer","minimum":1,"maximum":20,"default":5}},{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopBuyersResponse"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ontology":{"get":{"summary":"Packs, views, overlays, topic schemes and schemes","operationId":"ontology","parameters":[{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"The ontology registry and the active selection.","additionalProperties":true}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ontology/vocabulary":{"get":{"summary":"Classes, properties and shapes of the selection","operationId":"ontology_vocabulary","parameters":[{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"Classes, properties and shapes, labels in `lang`.","additionalProperties":true}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ontology/graph":{"get":{"summary":"The ontology as graph data","operationId":"ontology_graph","parameters":[{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"Nodes, edges and legend.","additionalProperties":true}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ontology/validation":{"get":{"summary":"The registry's cross-check diagnostics","operationId":"ontology_validation","parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"`{diagnostics: [...]}`","additionalProperties":true}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ontology/profiles/{profile_id}":{"get":{"summary":"A source profile as a mapping table","operationId":"ontology_profiles_profile_id","parameters":[{"name":"profile_id","in":"path","required":true,"description":"Profile id.","schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,63}$"}},{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"Field, business term, subject, property and match.","additionalProperties":true}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ontology/schemes/{scheme}":{"get":{"summary":"A concept scheme as a tree, one concept, or a search","operationId":"ontology_schemes_scheme","parameters":[{"name":"scheme","in":"path","required":true,"description":"Scheme id, for example `cpv` or `nuts`.","schema":{"type":"string"}},{"name":"code","in":"query","description":"One concept with its ancestors and children.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Search codes and labels.","schema":{"type":"string"}},{"name":"root","in":"query","description":"Root of the tree.","schema":{"type":"string"}},{"name":"depth","in":"query","description":"Tree depth.","schema":{"type":"integer","minimum":1,"maximum":4}},{"name":"limit","in":"query","description":"Concepts.","schema":{"type":"integer","minimum":1,"maximum":2000}},{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"A concept tree, a concept or search results.","additionalProperties":true}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ontology/export/{file}":{"get":{"summary":"Generated exports","operationId":"ontology_export_file","parameters":[{"name":"file","in":"path","required":true,"description":"Export file.","schema":{"type":"string","enum":["core.ttl","topics.ttl","extraction-schema.json"]}},{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"text/turtle":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"string"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/topics":{"get":{"summary":"Topics with counts of published opportunities","operationId":"topics","parameters":[{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"Topics, the tree and the caption.","additionalProperties":true}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/topics/{topic_id}/series":{"get":{"summary":"A topic's series by first publication","operationId":"topics_topic_id_series","parameters":[{"name":"topic_id","in":"path","required":true,"description":"Topic id.","schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,63}$"}},{"name":"from","in":"query","description":"First day.","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","description":"Last day.","schema":{"type":"string","format":"date"}},{"name":"interval","in":"query","description":"Bucket.","schema":{"type":"string","enum":["day","week","month"]}},{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"`{points: [{period, count, share, published_value_eur, awarded}]}`","additionalProperties":true}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/topics/{topic_id}/opportunities":{"get":{"summary":"Published opportunities assigned a topic","operationId":"topics_topic_id_opportunities","parameters":[{"name":"topic_id","in":"path","required":true,"description":"Topic id.","schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,63}$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}},{"name":"limit","in":"query","description":"Results per page.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"offset","in":"query","description":"Results to skip.","schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopicOpportunities"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/graph":{"get":{"summary":"Graph data for an opportunity or a node's neighbourhood","operationId":"graph","parameters":[{"name":"opportunity","in":"query","description":"Opportunity id.","schema":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"}},{"name":"node","in":"query","description":"Node id: an entity id or `cpt:<scheme>:<code>`.","schema":{"type":"string"}},{"name":"concepts","in":"query","description":"Concept nodes to draw.","schema":{"type":"string","enum":["none","classifications","all"]}},{"name":"ancestors","in":"query","description":"Concept ancestors.","schema":{"type":"integer","minimum":0,"maximum":4}},{"name":"max_nodes","in":"query","description":"Node budget.","schema":{"type":"integer","minimum":10,"maximum":3000}},{"name":"overlays","in":"query","description":"Comma list of overlay packs.","schema":{"type":"string"}},{"name":"view","in":"query","description":"A view of the base pack, or `none`.","schema":{"type":"string","enum":["procurement-lite","none"]}},{"name":"topics","in":"query","description":"Topic scheme version.","schema":{"type":"string","pattern":"^topics-v\\d+$"}},{"name":"lang","in":"query","description":"Labels in English or German.","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"Nodes, edges, legend and `truncated`.","additionalProperties":true}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/graph/stats":{"get":{"summary":"Graph counts over published opportunities","operationId":"graph_stats","parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"Node counts per class, statements per property.","additionalProperties":true}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/openapi.json":{"get":{"summary":"This document","operationId":"openapi_json","parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"OpenAPI 3.1","additionalProperties":true}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/views/companies":{"get":{"summary":"Companies and their relations: ownership, consortia, subcontracting, shared buyers","description":"Companies with awards in the covered period for the filter, by number of awards; at most 300 drawn (150 by default), the rest as clusters by main CPV division with counts. `expand` answers only the up to 25 companies connected to one company (`404` when it is no company). Public: it answers without a session, from published sources, ordered without a centre and with no band. Any other parameter is `400 bad_parameter`. Every node and edge links to its evidence with the time it was last checked; shared-buyer edges are computed from public awards and marked `inferred`. Awards in covered sources are not win rates.","operationId":"views_companies","parameters":[{"name":"cpv","in":"query","description":"A category: a CPV prefix of 2 to 8 digits (a division is 2).","schema":{"type":"string","pattern":"^\\d{2,8}$"}},{"name":"nuts","in":"query","description":"A region: a NUTS prefix (the country, a Land, a region).","schema":{"type":"string","pattern":"^[A-Z]{2}[A-Z0-9]{0,3}$"}},{"name":"size","in":"query","description":"Size class from the notices (BT-165); `sme` is micro, small or medium.","schema":{"type":"string","enum":["micro","small","medium","sme","large"]}},{"name":"verified","in":"query","description":"Only companies with a verified website.","schema":{"type":"boolean"}},{"name":"months","in":"query","description":"The covered period of awards and procedures, in months.","schema":{"type":"integer","minimum":1,"maximum":120,"default":36}},{"name":"limit","in":"query","description":"Companies drawn.","schema":{"type":"integer","minimum":1,"maximum":300,"default":150}},{"name":"expand","in":"query","description":"A company's organisation id: its connections only.","schema":{"type":"string","pattern":"^org_[0-9A-Z]{26}$"}},{"name":"lang","in":"query","description":"Accepted for symmetry; reasons and names come in English and German.","schema":{"type":"string","enum":["en","de"]}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewAnswer"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/views/tenders":{"get":{"summary":"Tenders and their buyers; categories and regions as clusters","description":"Tenders by the nearest deadline (open ones by default) and their buyers, at most 300 nodes (150 by default); CPV division × Land are clusters with counts, never nodes. `procedure` is refused while the procedure type is not in the catalogue. Public: it answers without a session, from published sources, ordered without a centre and with no band. Any other parameter is `400 bad_parameter`. Every node and edge links to its evidence with the time it was last checked; shared-buyer edges are computed from public awards and marked `inferred`. Awards in covered sources are not win rates.","operationId":"views_tenders","parameters":[{"name":"status","in":"query","description":"Opportunity status; `any` for all.","schema":{"type":"string","enum":["open","closed","cancelled","awarded","unknown","any"],"default":"open"}},{"name":"deadline_before","in":"query","description":"Deadlines up to the end of this day.","schema":{"type":"string","format":"date"}},{"name":"min_value_eur","in":"query","description":"Minimum published value in EUR.","schema":{"type":"integer","minimum":0}},{"name":"procedure","in":"query","description":"Procedure type (not in the catalogue yet: refused).","schema":{"type":"string"}},{"name":"sme","in":"query","description":"Suitable for SMEs (BT-726).","schema":{"type":"boolean"}},{"name":"cpv","in":"query","description":"A category: a CPV prefix of 2 to 8 digits (a division is 2).","schema":{"type":"string","pattern":"^\\d{2,8}$"}},{"name":"nuts","in":"query","description":"A region: a NUTS prefix (the country, a Land, a region).","schema":{"type":"string","pattern":"^[A-Z]{2}[A-Z0-9]{0,3}$"}},{"name":"buyer","in":"query","description":"A buyer's organisation id.","schema":{"type":"string","pattern":"^org_[0-9A-Z]{26}$"}},{"name":"limit","in":"query","description":"Nodes drawn, buyers included.","schema":{"type":"integer","minimum":1,"maximum":300,"default":150}},{"name":"lang","in":"query","description":"Accepted for symmetry; reasons and names come in English and German.","schema":{"type":"string","enum":["en","de"]}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewAnswer"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/views/tenders-companies":{"get":{"summary":"Buyers, tenders and companies in three layers, for one category or one buyer","description":"Needs exactly one of `cpv` and `buyer`. At most 50 tenders (procedures, their lots counted), awarded first; their buyers; the companies that won them (`awarded_to`, its weight the awarded value band) or that a notice names as bidders (`bid`). More tenders are `+n more` clusters per buyer. Public: it answers without a session, from published sources, ordered without a centre and with no band. Any other parameter is `400 bad_parameter`. Every node and edge links to its evidence with the time it was last checked; shared-buyer edges are computed from public awards and marked `inferred`. Awards in covered sources are not win rates.","operationId":"views_tenders_companies","parameters":[{"name":"cpv","in":"query","description":"A category: a CPV prefix of 2 to 8 digits (a division is 2).","schema":{"type":"string","pattern":"^\\d{2,8}$"}},{"name":"buyer","in":"query","description":"A buyer's organisation id.","schema":{"type":"string","pattern":"^org_[0-9A-Z]{26}$"}},{"name":"months","in":"query","description":"The covered period of awards and procedures, in months.","schema":{"type":"integer","minimum":1,"maximum":120,"default":36}},{"name":"limit","in":"query","description":"Tenders drawn.","schema":{"type":"integer","minimum":1,"maximum":50,"default":50}},{"name":"lang","in":"query","description":"Accepted for symmetry; reasons and names come in English and German.","schema":{"type":"string","enum":["en","de"]}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewAnswer"}}}},"304":{"description":"Not modified: `If-None-Match` named the ETag"},"400":{"description":"bad_parameter or bad_selection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/providers":{"get":{"summary":"The sign-in providers that are on","operationId":"auth_providers","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInProviders"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/oauth/start":{"post":{"summary":"Start a sign-in with Google, Microsoft or LinkedIn","description":"Answers 303 to the provider (OpenID Connect, with state, nonce and, for Google and Microsoft, PKCE) and sets the sealed state cookie `__Host-iwrt_oauth` (10 minutes). The Origin must be the site.","operationId":"auth_oauth_start","parameters":[{"name":"lang","in":"query","required":false,"description":"The language of the site pages the answer links to","schema":{"type":"string","enum":["en","de"]}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["google","microsoft","linkedin"]},"next":{"type":"string","maxLength":512}},"required":["provider"]}}}},"responses":{"303":{"description":"To the provider's authorization page","headers":{"Location":{"schema":{"type":"string"}}}},"400":{"description":"bad_parameter: not a provider","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: not from the site","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in or this provider is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/oauth/callback":{"get":{"summary":"Finish a provider sign-in","description":"Checks the state cookie, exchanges the code and checks the ID token (issuer, audience, expiry, nonce). A linked identity gets a session. A new one whose provider vouches for its address (Google `email_verified`, Microsoft `xms_edov`; never LinkedIn) gets a new account and a session when no account holds that address (E-62). Every other one gets a pending sign-in (`__Host-iwrt_pending`, 30 minutes) and the confirm-email page, where a code or a link mailed to the confirmed address creates or finds the account.","operationId":"auth_oauth_callback","parameters":[{"name":"provider","in":"query","required":true,"schema":{"type":"string","enum":["google","microsoft","linkedin"]}},{"name":"code","in":"query","required":false,"schema":{"type":"string"}},{"name":"state","in":"query","required":true,"schema":{"type":"string"}},{"name":"error","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"303":{"description":"Signed in (`next` or the account page), to the confirm-email page, or back to the sign-in page after a refusal","headers":{"Location":{"schema":{"type":"string"}}}},"400":{"description":"bad_parameter: the state, the code or the ID token did not hold","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in or this provider is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/pending":{"get":{"summary":"The pending provider sign-in","operationId":"auth_pending","parameters":[{"name":"__Host-iwrt_pending","in":"cookie","required":true,"description":"The pending provider sign-in, set by the callback; the site's confirm-email page forwards it (E-56).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingSignIn"}}}},"404":{"description":"not_found: no live pending sign-in, or sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/pending/email":{"post":{"summary":"Mail a code or a link to the confirmed address","description":"`delivery` `code` (the default): a 6-digit code, valid 10 minutes. `link` (E-62): a single-use link to the posting origin's confirm-email page (`/account/confirm-email?token=`, German `/de/konto/email-bestaetigen`), valid 15 minutes, only in this browser (the answer renews the pending cookie for as long as the link lives); a new link replaces the one before. Codes and links count together: at most 3 per pending sign-in, all to the address of its first mail, and 5 an hour and 10 a day per address. The Origin must be the site or the dashboard.","operationId":"auth_pending_email","parameters":[{"name":"__Host-iwrt_pending","in":"cookie","required":true,"description":"The pending provider sign-in, set by the callback; the site's confirm-email page forwards it (E-56).","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"The language of the site pages the answer links to","schema":{"type":"string","enum":["en","de"]}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":254},"delivery":{"type":"string","enum":["code","link"],"default":"code"}},"required":["email"]}},"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":254},"delivery":{"type":"string","enum":["code","link"],"default":"code"}},"required":["email"]}}}},"responses":{"202":{"description":"Sent (JSON request)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInSent"}}}},"303":{"description":"Sent (form post): the confirm-email page","headers":{"Location":{"schema":{"type":"string"}}}},"400":{"description":"bad_parameter: not an address, or not a delivery","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: not from the site","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: no live pending sign-in, or sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited: no more codes or links for now","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"internal: the mail could not be sent; try again later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/pending/code":{"post":{"summary":"Check the code: account, linked identity, session","description":"Five attempts per code. The right code creates the address's account or finds it, links the provider identity and sets the session cookie, once.","operationId":"auth_pending_code","parameters":[{"name":"__Host-iwrt_pending","in":"cookie","required":true,"description":"The pending provider sign-in, set by the callback; the site's confirm-email page forwards it (E-56).","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"The language of the site pages the answer links to","schema":{"type":"string","enum":["en","de"]}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"code":{"type":"string","pattern":"^[0-9 ]{6,12}$"}},"required":["code"]}}}},"responses":{"200":{"description":"Signed in (JSON request): `{status: \"signed_in\", next}`, the path to go to (`next` or the account page)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignedIn"}}}},"303":{"description":"Signed in (`next` or the account page), or the confirm-email page after a wrong code","headers":{"Location":{"schema":{"type":"string"}}}},"400":{"description":"bad_parameter: not 6 digits, or wrong (JSON request)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: not from the site, or no attempts left","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: no live pending sign-in, or sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/pending/confirm":{"get":{"summary":"Take a confirmation link: account, linked identity, session","description":"The link of `delivery` `link` (E-62), in the browser that started the sign-in: the token finds its pending sign-in, and the pending cookie must name that same one; otherwise `link_other_browser`, nothing changes and the link still works from that browser until it expires. Then the confirmed address's account is created or found, the provider identity linked and the session cookie set, once. GET only: a HEAD uses nothing.","operationId":"auth_pending_confirm","parameters":[{"name":"__Host-iwrt_pending","in":"cookie","required":true,"description":"The pending provider sign-in, set by the callback; the site's confirm-email page forwards it (E-56).","schema":{"type":"string"}},{"name":"token","in":"query","required":true,"description":"The link's token","schema":{"type":"string"}},{"name":"Accept","in":"header","required":false,"description":"`application/json` answers 200 with JSON instead of 303","schema":{"type":"string"}}],"responses":{"200":{"description":"Signed in (JSON request): `{status: \"signed_in\", next}`","headers":{"Set-Cookie":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignedIn"}}}},"303":{"description":"Signed in: `next` or the account page","headers":{"Location":{"schema":{"type":"string"}},"Set-Cookie":{"schema":{"type":"string"}}}},"400":{"description":"link_expired: the link is invalid, used, replaced or expired; link_other_browser: the request carries no pending cookie, or another sign-in's","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/onboarding":{"post":{"summary":"Finish onboarding: continue free","description":"Marks the session's workspace onboarded, once, so the dashboard's onboarding dialog closes for good (E-62). Paying needs no call here: a subscription the webhook projects marks it. The Origin must be the site or the dashboard.","operationId":"account_onboarding","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the site's account pages forward it (E-49).","schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"The CSRF token of `GET /v1/account`, unless the form carries it as `csrf`. The `Origin` must be the site.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/OnboardingRequest"}}}},"responses":{"200":{"description":"Onboarded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Onboarding"}}}},"400":{"description":"bad_parameter: choice is not free","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: no valid CSRF token or not from the site","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/email":{"post":{"summary":"Send a sign-in link","description":"Checks the Turnstile token, then mails a single-use link to the site's callback page, valid 15 minutes, at most 5 an hour per address. The answer is the same whether or not the address has an account.","operationId":"auth_email","parameters":[{"name":"lang","in":"query","required":false,"description":"The language of the site pages the answer links to","schema":{"type":"string","enum":["en","de"]}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/SignInRequest"}},"application/json":{"schema":{"$ref":"#/components/schemas/SignInRequest"}}}},"responses":{"202":{"description":"Sent (JSON request)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInSent"}}}},"303":{"description":"Sent (form post): the sign-in page's inbox notice","headers":{"Location":{"schema":{"type":"string"}}}},"400":{"description":"bad_parameter: not an address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: Turnstile failed or not from the site","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"internal: the mail could not be sent; try again later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/callback":{"get":{"summary":"Exchange a sign-in link for a session","description":"Uses the link's token once and sets the session cookie `__Host-iwrt_session` (Secure, HttpOnly, SameSite=Lax, Path=/, 30 days). The first sign-in of an address creates its account, a workspace of one and the free entitlement.","operationId":"auth_callback","parameters":[{"name":"token","in":"query","required":true,"description":"The link's token","schema":{"type":"string"}},{"name":"next","in":"query","required":false,"description":"A site path to go to","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"The language of the site pages the answer links to","schema":{"type":"string","enum":["en","de"]}}],"responses":{"303":{"description":"Signed in: `next` or the account page","headers":{"Location":{"schema":{"type":"string"}},"Set-Cookie":{"schema":{"type":"string"}}}},"400":{"description":"bad_parameter: the link is invalid, used or expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/signout":{"post":{"summary":"End the session","operationId":"auth_signout","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the site's account pages forward it (E-49).","schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"The CSRF token of `GET /v1/account`, unless the form carries it as `csrf`. The `Origin` must be the site.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"The language of the site pages the answer links to","schema":{"type":"string","enum":["en","de"]}}],"responses":{"200":{"description":"Signed out (JSON request); the cookie is cleared"},"303":{"description":"Signed out (form post): the sign-in page","headers":{"Location":{"schema":{"type":"string"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: no valid CSRF token or not from the site","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/export":{"get":{"summary":"Download the account's data","description":"The account's own data as one JSON file (accounts-and-usage scope 11): the account, its sign-in methods and sessions, its workspaces and their company, its entitlements and, for an owner or admin, the workspace's plans, every saved search with its subscription and consents, the newest alert deliveries, usage per day and the connected assistants. From the session only; never cached; offered as a download.","operationId":"account_export","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the site's account pages forward it (E-49).","schema":{"type":"string"}}],"responses":{"200":{"description":"The file","headers":{"Content-Disposition":{"description":"attachment; filename=\"inteliwert-account-<date>.json\"","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountExport"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account":{"get":{"summary":"The signed-in account","description":"The account, its workspace and role, the entitlement in force, its AI credit usage and access, its onboarding (E-62), and the CSRF token, from the session only; never cached. A free account's monthly credits are granted on the first read of the month.","operationId":"account","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the site's account pages forward it (E-49).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"summary":"Delete the account","description":"Deletes the signed-in account (accounts-and-usage scope 11): its sign-in methods and sessions, saved searches and alerts, connected assistants, memberships and each workspace it was the only member of; the usage ledger and billing records stay under random ids. Needs a sign-in of the last 15 minutes, the CSRF token, an `Origin` of the site or the dashboard, and the address typed again. Refused while a workspace deleted with it holds a plan that has not ended, or while the account owns a workspace with other members. Clears the session cookie; a form is answered `303` to the sign-in page (`deleted=1`, or `reauth=1` for an older sign-in).","operationId":"account_delete","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the site's account pages forward it (E-49).","schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"The CSRF token of `GET /v1/account`, unless the form carries it as `csrf`. The `Origin` must be the site.","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"The language of the site pages the answer links to","schema":{"type":"string","enum":["en","de"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountDeleteRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AccountDeleteRequest"}}}},"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountDeleted"}}}},"303":{"description":"A form: to the sign-in page"},"400":{"description":"bad_parameter: confirm is not the account's address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: no valid CSRF token or not from the site; reauth_required: the sign-in is older than 15 minutes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"conflict: a plan that has not ended, or a workspace with other members","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/company":{"get":{"summary":"The workspace's own company: a private pointer, never a public claim","operationId":"account_company","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceCompany"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"summary":"Set or change the workspace's own company","description":"A catalogue organisation (a company to sell, a public body or buyer to procure; a merged id is stored as the row it was merged into) or a pending private profile. Owner or admin. Nothing is written to the public catalogue.","operationId":"account_company_put","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"The CSRF token of `GET /v1/account`, unless the body carries it as `csrf`. The `Origin` must be the site or the dashboard.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceCompanyRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceCompany"}}}},"400":{"description":"bad_parameter: not a body of this route, or not an organisation of the side","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: not from the site or the dashboard, no valid CSRF token, or a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/company/suggest":{"get":{"summary":"Candidates for the onboarding step \"Your company\"","description":"With no `q`: organisations whose verified website is on the sign-in address's domain (nothing for a free-mail address). With `q`: by name, register number or LEI, over companies (`side=sell`) or buyers (`side=procure`). 30 a minute per account.","operationId":"account_company_suggest","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":100}},{"name":"side","in":"query","required":false,"schema":{"type":"string","enum":["sell","procure"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanySuggestResponse"}}}},"400":{"description":"bad_parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/views/market":{"get":{"summary":"My market: the workspace's company, its sectors and their members in bands","description":"The centre is the session's workspace company; a parameter never sets or widens it. Bands rest on matching or on overlap with the company's categories, each member with its reasons and sources: a possible match based on public information, never a percentage or a fit. `private, max-age=0` with an ETag.","operationId":"views_market","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}},{"name":"side","in":"query","required":false,"schema":{"type":"string","enum":["sell","procure"]},"description":"Ignored: the workspace's side applies"},{"name":"per_sector","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":40,"default":8}},{"name":"expand","in":"query","required":false,"description":"One sector: only its next 12 members","schema":{"type":"string","enum":["tenders","grants","buyers","competitors","partners","procedures","suppliers","possible_suppliers","similar_buyers","contracts_ending"]}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","de"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketView"}}}},"304":{"description":"Not modified (If-None-Match)"},"400":{"description":"bad_parameter: a parameter that names a centre, or one out of range","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"sign_in_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"no_company: the workspace has no company yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/company/consent":{"get":{"summary":"Whether the workspace may consent to a deep reading of its company's website, the consent and the latest reading","description":"The domain a consent would cover comes from the session: the sign-in address's registrable domain when it is the company website's, or a domain the workspace verified by DNS (E-50, E-83); a free-mail address never qualifies. `404` while `DEEP_CRAWL` is off.","operationId":"account_company_consent","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlConsentView"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in or the deep reading is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Consent to a deep reading of the company's website","description":"For the domain `GET` offered, to the words of `text_version`. Owner or admin. `201` when recorded, `200` when the same consent was already active.","operationId":"account_company_consent_grant","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"The CSRF token of `GET /v1/account`, unless the body carries it as `csrf`. The `Origin` must be the site or the dashboard.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentGrantRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlConsentView"}}}},"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlConsentView"}}}},"400":{"description":"bad_parameter: not a body of this route, or other words","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: no valid CSRF token, a member, or the session may not consent for this domain","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in or the deep reading is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"conflict: a consent for another domain is active","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"summary":"Revoke the consent","description":"The reading stops, the live view forgets what it showed, and what only the deep reading found is deleted (the crawler purges the catalogue's findings). Owner, admin or the account that gave it.","operationId":"account_company_consent_revoke","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"The CSRF token of `GET /v1/account`, unless the body carries it as `csrf`. The `Origin` must be the site or the dashboard.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlConsentView"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: no valid CSRF token, or a member who did not give it","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in or the deep reading is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/company/crawls":{"post":{"summary":"Ask for a deep reading of the consented website","description":"Recorded where the crawler picks it up (the catalogue's `crawl_job` beside the site's `crawl_target`, seed `claim`), with the depth and page budget of E-81. At most one queued or running per workspace, one a day. Owner or admin, with an active consent.","operationId":"account_company_crawl","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"The CSRF token of `GET /v1/account`, unless the body carries it as `csrf`. The `Origin` must be the site or the dashboard.","schema":{"type":"string"}}],"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlStatus"}}}},"400":{"description":"bad_parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: no consent, or it no longer covers the website","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in or the deep reading is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"conflict: a reading is already under way","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited: the website was read in the last 24 hours (Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/company/crawls/{crawl_id}/live":{"get":{"summary":"Watch a deep reading live (WebSocket)","description":"Upgrade: websocket. The session's workspace only, from the site's or the dashboard's Origin. The socket sends `hello`, the events so far, then each batch of `crawl.v1` events as it arrives, and `stopped` when the consent is revoked (docs/specs/live-crawl.md). `after` resumes after a sequence number.","operationId":"account_company_crawl_live","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}},{"name":"crawl_id","in":"path","required":true,"schema":{"type":"string","pattern":"^crl_[0-9A-Z]{26}$"}},{"name":"after","in":"query","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"101":{"description":"Switching protocols: the live view's socket"},"400":{"description":"bad_parameter: not a WebSocket upgrade","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: not from the site or the dashboard","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: no such crawl in this workspace, or the deep reading is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited: too many viewers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/company/chain":{"get":{"summary":"The workspace's own company chain: its brands and products, its group and the domains it links","description":"From the deep readings this workspace asked for and did not revoke, and the register's and GLEIF's records (E-84). Each finding carries its evidence (page or record, checked time) and its basis: stated by the company, the related site's Impressum, the register or GLEIF. A person among the owners is only `owned_by_person`. Private: nothing of it is published before the company is claimed (E-50). `404` while sign-in or the deep reading is off.","operationId":"account_company_chain","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyChainView"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in or the deep reading is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/insights/prices":{"get":{"summary":"Prices: observed awarded values of comparable awards","description":"Each value an award linked to its notice; the median with P25 and P75 from 5 values, P10 and P90 from 20; the awarded value against the buyer's published estimate; the lowest and highest tender where published; framework maximum values in their own series. Widened to the CPV division when the group has fewer than 5. Not a price recommendation and not a prediction. The company and its side are the session's workspace's; a parameter never sets them. Public evidence only; every row links its notice with its checked time. `private, max-age=0` with an ETag. With history reads on (`LAKE_READS`), `history` adds what the history holds when the recent data hold fewer than 5 or do not reach the window's first month: labelled \"from the history\", each row linked to the notice on its source with the time it was read, statistics under the same rules, `stale` with its time when the history is down, or \"history not available right now\" with no rows; null when not needed, absent while history reads are off. The CSV export holds the recent rows only.","operationId":"insights_prices","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}},{"name":"cpv","in":"query","required":false,"description":"The reference category: a CPV code, read as its group (3 digits) or a division (2 digits). Default: the company's first category","schema":{"type":"string","pattern":"^\\d{2,8}(-\\d)?$"}},{"name":"nuts","in":"query","required":false,"description":"Narrow to a Land (NUTS 1)","schema":{"type":"string","pattern":"^[A-Za-z]{2}[A-Za-z0-9]$"}},{"name":"buyer_type","in":"query","required":false,"description":"Narrow to a buyer legal type (BT-11 code)","schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,39}$"}},{"name":"months","in":"query","required":false,"description":"The window of conclusion dates (BT-145), in months","schema":{"type":"integer","minimum":1,"maximum":36,"default":36}},{"name":"opportunity","in":"query","required":false,"description":"A tender as the reference: its category, its own awards left out","schema":{"type":"string","pattern":"^opp_[0-9A-Z]{26}$"}},{"name":"format","in":"query","required":false,"description":"`csv` for the panel's rows as CSV","schema":{"type":"string","enum":["json","csv"],"default":"json"}},{"name":"lang","in":"query","required":false,"description":"The language of the CSV headers and labels","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK; `format=csv` answers the panel's rows as a CSV attachment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricesInsight"}},"text/csv":{"schema":{"type":"string"}}}},"304":{"description":"Not modified (If-None-Match)"},"400":{"description":"bad_parameter: a parameter the route does not take, or one out of range","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"sign_in_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off, or the reference opportunity is not published","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"no_company: the workspace has no company yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/insights/competition":{"get":{"summary":"Competition: known participation in comparable awards","description":"Who wins (by number of awards, with the observed awarded value and distinct buyers), tenders received per procedure and the single-tender share, the SME share with unknown sizes apart, the categories the company shares with each winner, repeat awards per buyer. Never a win rate or a market share. The company and its side are the session's workspace's; a parameter never sets them. Public evidence only; every row links its notice with its checked time. `private, max-age=0` with an ETag. With history reads on (`LAKE_READS`), `history` adds what the history holds when the recent data hold fewer than 5 or do not reach the window's first month: labelled \"from the history\", each row linked to the notice on its source with the time it was read, statistics under the same rules, `stale` with its time when the history is down, or \"history not available right now\" with no rows; null when not needed, absent while history reads are off. The CSV export holds the recent rows only.","operationId":"insights_competition","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}},{"name":"cpv","in":"query","required":false,"description":"The reference category: a CPV code, read as its group (3 digits) or a division (2 digits). Default: the company's first category","schema":{"type":"string","pattern":"^\\d{2,8}(-\\d)?$"}},{"name":"nuts","in":"query","required":false,"description":"Narrow to a Land (NUTS 1)","schema":{"type":"string","pattern":"^[A-Za-z]{2}[A-Za-z0-9]$"}},{"name":"buyer_type","in":"query","required":false,"description":"Narrow to a buyer legal type (BT-11 code)","schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,39}$"}},{"name":"months","in":"query","required":false,"description":"The window of conclusion dates (BT-145), in months","schema":{"type":"integer","minimum":1,"maximum":36,"default":36}},{"name":"format","in":"query","required":false,"description":"`csv` for the panel's rows as CSV","schema":{"type":"string","enum":["json","csv"],"default":"json"}},{"name":"lang","in":"query","required":false,"description":"The language of the CSV headers and labels","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK; `format=csv` answers the panel's rows as a CSV attachment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitionInsight"}},"text/csv":{"schema":{"type":"string"}}}},"304":{"description":"Not modified (If-None-Match)"},"400":{"description":"bad_parameter: a parameter the route does not take, or one out of range","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"sign_in_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off, or the reference opportunity is not published","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"no_company: the workspace has no company yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/insights/contracts-ending":{"get":{"summary":"Contracts ending: awards whose contract may end in the chosen months","description":"In the company's categories (procure side: the authority's own awards). Each end with its precision: published end, start + duration, or earliest end from the signing date. Options and renewals as published, never added. \"End not published\" counted apart. An estimated end, not a new tender. The company and its side are the session's workspace's; a parameter never sets them. Public evidence only; every row links its notice with its checked time. `private, max-age=0` with an ETag. With history reads on (`LAKE_READS`), `history` adds what the history holds when the recent data hold fewer than 5 or do not reach the window's first month: labelled \"from the history\", each row linked to the notice on its source with the time it was read, statistics under the same rules, `stale` with its time when the history is down, or \"history not available right now\" with no rows; null when not needed, absent while history reads are off. The CSV export holds the recent rows only.","operationId":"insights_contracts_ending","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the dashboard Worker forwards it (E-60).","schema":{"type":"string"}},{"name":"cpv","in":"query","required":false,"description":"The reference category: a CPV code, read as its group (3 digits) or a division (2 digits). Default: the company's first category","schema":{"type":"string","pattern":"^\\d{2,8}(-\\d)?$"}},{"name":"nuts","in":"query","required":false,"description":"Narrow to a Land (NUTS 1)","schema":{"type":"string","pattern":"^[A-Za-z]{2}[A-Za-z0-9]$"}},{"name":"buyer","in":"query","required":false,"description":"Narrow to one buyer (an organisation id); the procure side defaults to the authority","schema":{"type":"string","pattern":"^org_[0-9A-Z]{26}$"}},{"name":"within_months","in":"query","required":false,"description":"The window, in months from today","schema":{"type":"integer","enum":[3,6,12,18],"default":12}},{"name":"format","in":"query","required":false,"description":"`csv` for the panel's rows as CSV","schema":{"type":"string","enum":["json","csv"],"default":"json"}},{"name":"lang","in":"query","required":false,"description":"The language of the CSV headers and labels","schema":{"type":"string","enum":["en","de"],"default":"en"}}],"responses":{"200":{"description":"OK; `format=csv` answers the panel's rows as a CSV attachment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractsEndingInsight"}},"text/csv":{"schema":{"type":"string"}}}},"304":{"description":"Not modified (If-None-Match)"},"400":{"description":"bad_parameter: a parameter the route does not take, or one out of range","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"sign_in_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in is off, or the reference opportunity is not published","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"no_company: the workspace has no company yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/billing":{"get":{"summary":"The workspace's subscriptions and credits","operationId":"billing","security":[{"session":[]}],"responses":{"200":{"description":"Live subscriptions, the credit pool and its reset","content":{"application/json":{"schema":{"type":"object","required":["workspace_id","catalogue_version","subscriptions","credits"],"properties":{"workspace_id":{"type":"string"},"catalogue_version":{"type":"string"},"subscriptions":{"type":"array","items":{"type":"object","properties":{"family":{"type":"string","enum":["seat","api"]},"plan":{"type":"string","enum":["starter","pro","api_starter","api_growth"]},"interval":{"type":"string","enum":["month","year"]},"seats":{"type":["integer","null"]},"state":{"type":"string","enum":["payment_pending","active","cancelled_at_period_end","past_due","grace"]},"current_period_end":{"type":["string","null"],"format":"date-time"},"cancel_at_period_end":{"type":"boolean"}}}},"credits":{"type":"object","properties":{"pool":{"type":"integer"},"used":{"type":"integer"},"top_up":{"type":"integer"},"resets_at":{"type":["string","null"],"format":"date-time"}}}}}}}},"401":{"description":"auth_required: no valid session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: billing is not configured, or not yet open to the session's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/billing/checkout":{"post":{"summary":"Start a subscription in Stripe Checkout","description":"Starter (one seat), Pro (1 to 500 seats) or an API plan, monthly or yearly, for the session's workspace; card or SEPA Direct Debit. A workspace that already holds a live subscription of the family is `forbidden`; it changes in the portal. Stripe sends the buyer back to the posting site's billing page (`?checkout=done` or `?checkout=cancelled`), or, for a JSON request from the dashboard (an account origin other than the site), to the dashboard's `/?checkout=done` or `/?checkout=cancelled` (E-62). The redirect back grants nothing: the webhook does.","operationId":"billing_checkout","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["plan","interval"],"properties":{"plan":{"type":"string","enum":["starter","pro","api_starter","api_growth"]},"interval":{"type":"string","enum":["month","year"]},"seats":{"type":"integer","minimum":1,"maximum":500},"csrf":{"type":"string","description":"The session's CSRF token (forms)"},"lang":{"type":"string","enum":["en","de"],"description":"The language of the site page Stripe sends the buyer back to (else the Referer's path or Accept-Language)"},"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,64}$","description":"Retries with the same key reuse the Stripe session (or the `Idempotency-Key` header)"}}}},"application/json":{"schema":{"type":"object","required":["plan","interval"],"properties":{"plan":{"type":"string","enum":["starter","pro","api_starter","api_growth"]},"interval":{"type":"string","enum":["month","year"]},"seats":{"type":"integer","minimum":1,"maximum":500},"csrf":{"type":"string","description":"The session's CSRF token (forms)"},"lang":{"type":"string","enum":["en","de"],"description":"The language of the site page Stripe sends the buyer back to (else the Referer's path or Accept-Language)"},"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,64}$","description":"Retries with the same key reuse the Stripe session (or the `Idempotency-Key` header)"}}}}}},"responses":{"200":{"description":"A JSON request gets the Stripe URL","content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}}}}}},"303":{"description":"A form post (`application/x-www-form-urlencoded`) is redirected to Stripe","headers":{"Location":{"schema":{"type":"string","format":"uri"}}}},"400":{"description":"bad_parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required: no valid session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: no valid CSRF token, not an owner or admin, or not allowed for the workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: billing is not configured, or not yet open to the session's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/billing/portal":{"post":{"summary":"Open the Stripe Customer Portal","description":"Switch monthly and yearly, change Pro seats, update the payment method, billing address and VAT ID, see invoices, cancel at period end. `family` picks the subscription family's portal when the workspace holds both. `intent` picks where it opens: `manage` (the default) its home; `cancel` the cancellation of the family's live subscription, `update` its plan change, each returning to the billing page when done. `not_found` when the workspace has no Stripe customer yet, or for `cancel` and `update` no live subscription of the family. The portal returns to the posting site's billing page, or, for a JSON request from the dashboard, to the dashboard's `/` (E-62).","operationId":"billing_portal","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","required":[],"properties":{"family":{"type":"string","enum":["seat","api"]},"intent":{"type":"string","enum":["manage","cancel","update"],"default":"manage","description":"manage: the portal's home; cancel or update: Stripe's flow for the family's live subscription"},"csrf":{"type":"string","description":"The session's CSRF token (forms)"},"lang":{"type":"string","enum":["en","de"],"description":"The language of the site page Stripe sends the buyer back to (else the Referer's path or Accept-Language)"},"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,64}$","description":"Retries with the same key reuse the Stripe session (or the `Idempotency-Key` header)"}}}},"application/json":{"schema":{"type":"object","required":[],"properties":{"family":{"type":"string","enum":["seat","api"]},"intent":{"type":"string","enum":["manage","cancel","update"],"default":"manage","description":"manage: the portal's home; cancel or update: Stripe's flow for the family's live subscription"},"csrf":{"type":"string","description":"The session's CSRF token (forms)"},"lang":{"type":"string","enum":["en","de"],"description":"The language of the site page Stripe sends the buyer back to (else the Referer's path or Accept-Language)"},"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,64}$","description":"Retries with the same key reuse the Stripe session (or the `Idempotency-Key` header)"}}}}}},"responses":{"200":{"description":"A JSON request gets the Stripe URL","content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}}}}}},"303":{"description":"A form post (`application/x-www-form-urlencoded`) is redirected to Stripe","headers":{"Location":{"schema":{"type":"string","format":"uri"}}}},"400":{"description":"bad_parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required: no valid session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: no valid CSRF token, not an owner or admin, or not allowed for the workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: billing is not configured or not yet open to the session's account, the workspace has no Stripe customer, or (cancel, update) no live subscription of the family","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/billing/top-up":{"post":{"summary":"Buy credit packs in Stripe Checkout","description":"1,000 credits a pack, at most 10 a calendar month per workspace (`quota_exceeded` beyond, with `Retry-After`), valid to the end of the subscription year. A workspace without a paid subscription is `forbidden`. It returns like checkout: the site's billing page, or the dashboard's `/` for the dashboard.","operationId":"billing_top_up","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","required":[],"properties":{"packs":{"type":"integer","minimum":1,"maximum":10},"csrf":{"type":"string","description":"The session's CSRF token (forms)"},"lang":{"type":"string","enum":["en","de"],"description":"The language of the site page Stripe sends the buyer back to (else the Referer's path or Accept-Language)"},"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,64}$","description":"Retries with the same key reuse the Stripe session (or the `Idempotency-Key` header)"}}}},"application/json":{"schema":{"type":"object","required":[],"properties":{"packs":{"type":"integer","minimum":1,"maximum":10},"csrf":{"type":"string","description":"The session's CSRF token (forms)"},"lang":{"type":"string","enum":["en","de"],"description":"The language of the site page Stripe sends the buyer back to (else the Referer's path or Accept-Language)"},"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,64}$","description":"Retries with the same key reuse the Stripe session (or the `Idempotency-Key` header)"}}}}}},"responses":{"200":{"description":"A JSON request gets the Stripe URL","content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}}}}}},"303":{"description":"A form post (`application/x-www-form-urlencoded`) is redirected to Stripe","headers":{"Location":{"schema":{"type":"string","format":"uri"}}}},"400":{"description":"bad_parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required: no valid session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: no valid CSRF token, not an owner or admin, or not allowed for the workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: billing is not configured, or not yet open to the session's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"quota_exceeded: the monthly cap of packs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/billing/webhook":{"post":{"summary":"Stripe's webhook","description":"Called by Stripe only. The `Stripe-Signature` header is verified on the raw body before anything is parsed; an event of the other mode is refused. Answered 200 once its effects committed (`duplicate` for a repeat, `stale` for an event older than the last one applied), 500 on any failure so Stripe retries. Not rate-limited per client.","operationId":"billing_webhook","security":[{"stripeSignature":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Received","content":{"application/json":{"schema":{"type":"object","required":["received"],"properties":{"received":{"type":"boolean"},"result":{"type":"string"},"duplicate":{"type":"boolean"},"stale":{"type":"boolean"}}}}}},"400":{"description":"bad_parameter: a missing or wrong signature, an old timestamp, not an event, or the other mode","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: billing is not configured (no Stripe key, or the mode guard failed)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal: Stripe retries","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/saved-searches":{"get":{"summary":"The account's saved searches and its allowance","operationId":"saved_searches_list","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearchList"}}}},"401":{"description":"auth_required: no valid session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: alerts are off, or no such saved search of this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Save a search with email alerts","description":"Stores `{q, filters}` as `/v1/search` reads them, with a `daily` or `weekly` subscription and a consent record, and mails the double opt-in link; nothing is sent before it is opened. The same request again answers the saved search already there (200). One more than the plan's allowance is `409 conflict`.","operationId":"saved_searches_create","security":[{"session":[]}],"parameters":[{"name":"X-CSRF-Token","in":"header","required":true,"description":"The session's CSRF token (`GET /v1/account` `csrf`)","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["request"],"properties":{"request":{"type":"object","required":["q"],"properties":{"q":{"type":"string","maxLength":500},"filters":{"type":"object"}}},"frequency":{"type":"string","enum":["daily","weekly"]},"name":{"type":"string","maxLength":120},"lang":{"type":"string","enum":["en","de"]}}}}}},"responses":{"200":{"description":"The same request was saved before","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearch"}}}},"201":{"description":"Saved; `confirmation_sent` says whether the link went out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearch"}}}},"400":{"description":"bad_parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required: no valid session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: no valid CSRF token, or not from an account origin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: alerts are off, or no such saved search of this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"conflict: the plan's allowance of saved searches is reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/saved-searches/{saved_search_id}":{"delete":{"summary":"Delete a saved search and end its alerts","description":"Its name, words and filters are cleared; the consent record keeps its id and times.","operationId":"saved_searches_delete","security":[{"session":[]}],"parameters":[{"name":"saved_search_id","in":"path","required":true,"description":"The saved search","schema":{"type":"string","pattern":"^ss_[0-9A-Z]{26}$"}},{"name":"X-CSRF-Token","in":"header","required":true,"description":"The session's CSRF token (`GET /v1/account` `csrf`)","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"bad_parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required: no valid session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: no valid CSRF token, or not from an account origin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: alerts are off, or no such saved search of this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/saved-searches/{saved_search_id}/subscription":{"put":{"summary":"Set the frequency, pause or resume, or send the confirmation link again","description":"A new confirmation link goes out at most once an hour per saved search and 5 times an hour per account (`confirmation_sent: false` otherwise, and the link already mailed keeps working). A resume within an hour of the last start does not record the matches again.","operationId":"saved_searches_subscription","security":[{"session":[]}],"parameters":[{"name":"saved_search_id","in":"path","required":true,"description":"The saved search","schema":{"type":"string","pattern":"^ss_[0-9A-Z]{26}$"}},{"name":"X-CSRF-Token","in":"header","required":true,"description":"The session's CSRF token (`GET /v1/account` `csrf`)","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"frequency":{"type":"string","enum":["daily","weekly"]},"state":{"type":"string","enum":["active","paused"]},"resend_confirmation":{"type":"boolean"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearch"}}}},"400":{"description":"bad_parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required: no valid session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: no valid CSRF token, or not from an account origin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: alerts are off, or no such saved search of this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"conflict: unsubscribed for good","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/alerts/confirm":{"get":{"summary":"The confirm page: one button; a GET changes nothing","description":"No session. Mail scanners open every link, so a GET (or a HEAD) only shows the page; its button posts. HTML for a person; JSON `{status: pending}` with `Accept: application/json`.","operationId":"alerts_confirm_page","parameters":[{"name":"token","in":"query","required":true,"description":"The link's token (32 random bytes)","schema":{"type":"string","maxLength":128}}],"responses":{"200":{"description":"The page","content":{"text/html":{"schema":{"type":"string"}}}},"400":{"description":"link_expired: used, expired or unknown","content":{"text/html":{"schema":{"type":"string"}}}},"404":{"description":"not_found: alerts are off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Confirm the double opt-in of an alert","description":"Single use, valid 7 days, no session: the confirm page's button. HTML for a person; JSON with `Accept: application/json`.","operationId":"alerts_confirm","parameters":[{"name":"token","in":"query","required":true,"description":"The link's token (32 random bytes)","schema":{"type":"string","maxLength":128}}],"responses":{"200":{"description":"Confirmed","content":{"text/html":{"schema":{"type":"string"}}}},"400":{"description":"link_expired: used, expired or unknown","content":{"text/html":{"schema":{"type":"string"}}}},"404":{"description":"not_found: alerts are off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/alerts/unsubscribe":{"get":{"summary":"The unsubscribe page: one button; a GET changes nothing","operationId":"alerts_unsubscribe_page","parameters":[{"name":"token","in":"query","required":true,"description":"The subscription's unsubscribe token","schema":{"type":"string","maxLength":128}}],"responses":{"200":{"description":"The page","content":{"text/html":{"schema":{"type":"string"}}}},"400":{"description":"The link is not valid","content":{"text/html":{"schema":{"type":"string"}}}},"404":{"description":"not_found: alerts are off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"One-click unsubscribe (RFC 8058), immediate and final, no session","operationId":"alerts_unsubscribe","parameters":[{"name":"token","in":"query","required":true,"description":"The subscription's unsubscribe token","schema":{"type":"string","maxLength":128}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"List-Unsubscribe":{"type":"string","enum":["One-Click"]}}}}}},"responses":{"200":{"description":"Unsubscribed","content":{"text/plain":{"schema":{"type":"string"}},"text/html":{"schema":{"type":"string"}}}},"400":{"description":"bad_parameter: the link is not valid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: alerts are off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/connect":{"get":{"summary":"A waiting connection request, for the consent page","description":"What the consent page shows for an authorization request the OAuth server keeps for 10 minutes: the assistant's name as it registered itself, where the access goes, whether that is an app on this computer, the scope, the signed-in address and the CSRF token.","operationId":"account_connect_request","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the site's account pages forward it (E-49).","schema":{"type":"string"}},{"name":"request","in":"query","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectRequest"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: the request is unknown, used or expired, or sign-in for assistants is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Allow or decline a connection","description":"`allow` connects the assistant to the session's account and workspace with the scope `search:read` and answers 303 to the assistant with the authorization code; `deny` answers 303 to it with `access_denied`. The request is used once. With `Accept: application/json`, 200 `{redirect_to}`.","operationId":"account_connect_answer","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the site's account pages forward it (E-49).","schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"The CSRF token of `GET /v1/account`, unless the form carries it as `csrf`. The `Origin` must be the site or the dashboard.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"request":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"},"decision":{"type":"string","enum":["allow","deny"]},"csrf":{"type":"string"}},"required":["request","decision"]}},"application/json":{"schema":{"type":"object","properties":{"request":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"},"decision":{"type":"string","enum":["allow","deny"]},"csrf":{"type":"string"}},"required":["request","decision"]}}}},"responses":{"200":{"description":"JSON: where to send the browser","content":{"application/json":{"schema":{"type":"object","properties":{"redirect_to":{"type":"string"}},"required":["redirect_to"]}}}},"303":{"description":"To the assistant's redirect URI, with `code` or `error`, `state` and `iss`","headers":{"Location":{"schema":{"type":"string"}}}},"400":{"description":"bad_parameter: decision is allow or deny","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: not from the site, or no valid CSRF token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: the request is unknown, used or expired, or sign-in for assistants is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/connections":{"get":{"summary":"The assistants connected to the account","operationId":"account_connections","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the site's account pages forward it (E-49).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK, newest first","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Connections"}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: sign-in for assistants is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/connections/{connection_id}":{"delete":{"summary":"Disconnect an assistant","description":"Revokes the connection: its grant and every token of it. The assistant's next call is `auth_required`.","operationId":"account_connection_revoke","parameters":[{"name":"__Host-iwrt_session","in":"cookie","required":true,"description":"The session cookie; the site's account pages forward it (E-49).","schema":{"type":"string"}},{"name":"X-CSRF-Token","in":"header","required":false,"description":"The CSRF token of `GET /v1/account`, unless the form carries it as `csrf`. The `Origin` must be the site or the dashboard.","schema":{"type":"string"}},{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,128}$"}}],"responses":{"200":{"description":"Revoked","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["revoked"]},"connection_id":{"type":"string"}},"required":["status","connection_id"]}}}},"401":{"description":"auth_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"forbidden: not from the site, or no valid CSRF token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found: no such connection of this account, or sign-in for assistants is off","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"session":{"type":"apiKey","in":"cookie","name":"__Host-iwrt_session","description":"The session cookie of inteliwert.com; the site Worker forwards it with the account pages' form posts"},"stripeSignature":{"type":"apiKey","in":"header","name":"Stripe-Signature","description":"HMAC-SHA256 of `<t>.<body>` under the webhook endpoint's signing secret"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_parameter","bad_selection","auth_required","forbidden","not_found","method_not_allowed","rate_limited","internal","quota_exceeded","conflict","link_expired","link_other_browser","sign_in_required","no_company","reauth_required"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false},"Health":{"type":"object","properties":{"status":{"type":"string","const":"ok"},"commit":{"type":"string"}},"required":["status","commit"],"additionalProperties":false},"OpportunityPage":{"type":"object","properties":{"opportunity_id":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"},"kind":{"type":"string","enum":["tender","grant"]},"status":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]},"title":{"type":"string","minLength":1},"description":{"type":"string"},"slug":{"type":"string","pattern":"^[a-z0-9-]+$"},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/(tender|grant)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/(ausschreibung|foerderung)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false},"lang":{"type":"string","enum":["en","de"]},"buyer":{"anyOf":[{"type":"object","properties":{"organisation_id":{"type":["string","null"]},"name":{"type":"string","minLength":1},"city":{"type":["string","null"]},"country":{"type":["string","null"]}},"required":["organisation_id","name","city","country"],"additionalProperties":false},{"type":"null"}]},"country":{"type":"string","minLength":2},"cpv":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"type":["string","null"]}},"required":["code","label"],"additionalProperties":false}},"main_cpv":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"type":["string","null"]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"nuts":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"type":["string","null"]}},"required":["code","label"],"additionalProperties":false}},"published_value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"vat":{"type":"string","const":"excluded"}},"required":["amount","currency","vat"],"additionalProperties":false},{"type":"null"}]},"deadline":{"anyOf":[{"type":"object","properties":{"at":{"type":"string","minLength":1},"offset":{"type":["string","null"]}},"required":["at","offset"],"additionalProperties":false},{"type":"null"}]},"procedure_type":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"type":["string","null"]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"first_published_at":{"type":["string","null"]},"last_published_at":{"type":["string","null"]},"updated_at":{"type":"string","minLength":1},"identifiers":{"type":"array","items":{"type":"object","properties":{"scheme":{"type":"string"},"value":{"type":"string"}},"required":["scheme","value"],"additionalProperties":false}},"source":{"type":"object","properties":{"source_id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"licence":{"type":"string","minLength":1},"licence_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"notice_url":{"type":"string","format":"uri"},"last_checked_at":{"type":"string","minLength":1}},"required":["source_id","name","licence","licence_url","notice_url","last_checked_at"],"additionalProperties":false},"lots":{"type":"array","items":{"type":"object","properties":{"lot_id":{"type":"string","minLength":1},"source_lot_id":{"type":"string","minLength":1},"title":{"type":"string"},"description":{"type":"string"},"cpv":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"type":["string","null"]}},"required":["code","label"],"additionalProperties":false}},"nuts":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"type":["string","null"]}},"required":["code","label"],"additionalProperties":false}},"value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"vat":{"type":"string","const":"excluded"}},"required":["amount","currency","vat"],"additionalProperties":false},{"type":"null"}]},"deadline":{"anyOf":[{"type":"object","properties":{"at":{"type":"string","minLength":1},"offset":{"type":["string","null"]}},"required":["at","offset"],"additionalProperties":false},{"type":"null"}]},"contract_terms":{"type":"object","properties":{"duration":{"anyOf":[{"type":"object","properties":{"value":{"type":"integer","minimum":0},"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"]}},"required":["value","unit"],"additionalProperties":false},{"type":"null"}]},"start":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"end":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"other_duration":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"options":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"renewal":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"max_renewals":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"modifications":{"type":"array","items":{"type":"object","properties":{"reason_code":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"reason":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"description":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"modified_notice":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]}},"required":["reason_code","reason","description","modified_notice"],"additionalProperties":false}}},"required":["duration","start","end","other_duration","options","renewal","max_renewals","modifications"],"additionalProperties":false}},"required":["lot_id","source_lot_id","title","description","cpv","nuts","value","deadline"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"object","properties":{"notice_version_id":{"type":"string","minLength":1},"source_record_id":{"type":"string","minLength":1},"version":{"type":"string"},"published_at":{"type":["string","null"]},"fetched_at":{"type":"string","minLength":1},"source_url":{"type":"string","format":"uri"},"notice_type":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"type":["string","null"]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]}},"required":["notice_version_id","source_record_id","version","published_at","fetched_at","source_url","notice_type"],"additionalProperties":false}},"organisations":{"type":"array","items":{"type":"object","properties":{"organisation_id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"role":{"type":"string","enum":["buyer","tenderer","subcontractor","winner"]},"city":{"type":["string","null"]},"country":{"type":["string","null"]}},"required":["organisation_id","name","role","city","country"],"additionalProperties":false}},"awards":{"type":"array","items":{"type":"object","properties":{"award_id":{"type":"string","minLength":1},"source_lot_id":{"type":["string","null"]},"winner_name":{"type":["string","null"]},"value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"vat":{"type":"string","const":"excluded"}},"required":["amount","currency","vat"],"additionalProperties":false},{"type":"null"}]},"received_tenders":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"concluded_at":{"type":["string","null"]},"winner_decision_at":{"type":["string","null"]}},"required":["award_id","source_lot_id","winner_name","value","received_tenders","concluded_at"],"additionalProperties":false}},"documents":{"type":"array","items":{"type":"object","properties":{"document_id":{"type":"string","minLength":1},"title":{"type":"string"},"source_url":{"type":"string","format":"uri"}},"required":["document_id","title","source_url"],"additionalProperties":false}},"topics":{"type":"array","items":{"type":"object","properties":{"topic_id":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"method":{"type":"string","minLength":1},"quote":{"type":["string","null"]}},"required":["topic_id","label","method","quote"],"additionalProperties":false}},"card_version":{"anyOf":[{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"},{"type":"null"}]},"abstract":{"anyOf":[{"type":"object","properties":{"lang":{"type":"string","enum":["en","de"]},"sentences":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":300},"quote":{"type":"string","minLength":5,"maxLength":300}},"required":["text","quote"],"additionalProperties":false},"minItems":1,"maxItems":3},"model":{"type":"string","minLength":1},"created_at":{"type":"string","minLength":1},"label":{"type":"string","minLength":1}},"required":["lang","sentences","model","created_at","label"],"additionalProperties":false},{"type":"null"}]},"buyer_profile":{"anyOf":[{"type":"object","properties":{"organisation_id":{"type":"string","pattern":"^org_[0-9A-Z]{26}$"},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/company\\/org_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/unternehmen\\/org_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false}},"required":["organisation_id","canonical_path"],"additionalProperties":false},{"type":"null"}]},"grant":{"anyOf":[{"type":"object","properties":{"programme":{"type":"object","properties":{"code":{"type":["string","null"]},"name":{"type":"string","minLength":1}},"required":["code","name"],"additionalProperties":false},"call":{"type":"object","properties":{"id":{"type":"string","minLength":1},"title":{"type":["string","null"]}},"required":["id","title"],"additionalProperties":false},"topic_id":{"type":["string","null"]},"types_of_action":{"type":"array","items":{"type":"string"}},"submission_status":{"type":"string","enum":["forthcoming","open","closed"]},"deadline_model":{"type":["string","null"]},"opens_at":{"type":["string","null"]},"deadlines":{"type":"array","items":{"type":"string"}},"budget":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$"},"years":{"type":"array","items":{"type":"string","pattern":"^\\d{4}$"}},"expected_grants":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"min_contribution":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"max_contribution":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["amount","currency","years","expected_grants","min_contribution","max_contribution"],"additionalProperties":false},{"type":"null"}]},"applicant_types":{"type":"array","items":{"type":"string"}},"eligibility":{"type":"array","items":{"type":"object","properties":{"section":{"type":"string","enum":["eligible_countries","other_eligibility"]},"heading":{"type":"string","minLength":1},"text":{"type":"string","minLength":1},"source_url":{"type":"string","format":"uri"}},"required":["section","heading","text","source_url"],"additionalProperties":false}},"official_url":{"type":"string","format":"uri"},"last_checked_at":{"type":"string","minLength":1},"label":{"type":"string","minLength":1}},"required":["programme","call","topic_id","types_of_action","submission_status","deadline_model","opens_at","deadlines","budget","applicant_types","eligibility","official_url","last_checked_at","label"],"additionalProperties":false},{"type":"null"}]}},"required":["opportunity_id","kind","status","title","description","slug","canonical_path","lang","buyer","country","cpv","main_cpv","nuts","published_value","deadline","procedure_type","first_published_at","last_published_at","updated_at","identifiers","source","lots","notices","organisations","awards","documents","topics"],"additionalProperties":false},"ResultCard":{"type":"object","properties":{"opportunity_id":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"},"kind":{"type":"string","enum":["tender","grant"]},"status":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]},"title":{"type":"string","minLength":1},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/(tender|grant)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/(ausschreibung|foerderung)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false},"buyer":{"anyOf":[{"type":"object","properties":{"organisation_id":{"type":["string","null"]},"name":{"type":"string"}},"required":["organisation_id","name"],"additionalProperties":false},{"type":"null"}]},"deadline":{"anyOf":[{"type":"object","properties":{"at":{"type":"string","minLength":1},"offset":{"type":["string","null"]}},"required":["at","offset"],"additionalProperties":false},{"type":"null"}]},"published_value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"vat":{"type":"string","const":"excluded"}},"required":["amount","currency","vat"],"additionalProperties":false},{"type":"null"}]},"cpv":{"type":"array","items":{"type":"string"}},"nuts":{"type":"array","items":{"type":"string"}},"source_url":{"type":"string","format":"uri"},"last_checked_at":{"type":"string","minLength":1},"grant":{"anyOf":[{"type":"object","properties":{"programme":{"type":"string","minLength":1},"call_id":{"type":"string","minLength":1},"topic_id":{"type":["string","null"]},"submission_status":{"type":"string","enum":["forthcoming","open","closed"]},"opens_at":{"type":["string","null"]},"deadline_model":{"type":["string","null"]}},"required":["programme","call_id","topic_id","submission_status","opens_at","deadline_model"],"additionalProperties":false},{"type":"null"}]}},"required":["opportunity_id","kind","status","title","canonical_path","buyer","deadline","published_value","cpv","nuts","source_url","last_checked_at"],"additionalProperties":false},"SearchResponse":{"type":"object","properties":{"mode":{"type":"string","enum":["lexical","hybrid","lexical_only"]},"reduced_features":{"type":"array","items":{"type":"string","enum":["semantic"]}},"interpreted":{"type":"object","properties":{"terms":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["tender","grant"]},"status":{"type":"string"},"cpv":{"type":"array","items":{"type":"string"}},"nuts":{"type":"array","items":{"type":"string"}},"min_value_eur":{"type":"number"},"topic":{"type":"string"},"expanded":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string"},"group":{"type":"string"},"added":{"type":"array","items":{"type":"string"}}},"required":["term","group","added"],"additionalProperties":false}}},"required":["terms"],"additionalProperties":false},"sort":{"type":"string","enum":["relevance","updated","deadline","published"]},"total":{"type":"integer","minimum":0},"total_capped":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"opportunity_id":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"},"kind":{"type":"string","enum":["tender","grant"]},"status":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]},"title":{"type":"string","minLength":1},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/(tender|grant)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/(ausschreibung|foerderung)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false},"buyer":{"anyOf":[{"type":"object","properties":{"organisation_id":{"type":["string","null"]},"name":{"type":"string"}},"required":["organisation_id","name"],"additionalProperties":false},{"type":"null"}]},"deadline":{"anyOf":[{"type":"object","properties":{"at":{"type":"string","minLength":1},"offset":{"type":["string","null"]}},"required":["at","offset"],"additionalProperties":false},{"type":"null"}]},"published_value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"vat":{"type":"string","const":"excluded"}},"required":["amount","currency","vat"],"additionalProperties":false},{"type":"null"}]},"cpv":{"type":"array","items":{"type":"string"}},"nuts":{"type":"array","items":{"type":"string"}},"source_url":{"type":"string","format":"uri"},"last_checked_at":{"type":"string","minLength":1},"grant":{"anyOf":[{"type":"object","properties":{"programme":{"type":"string","minLength":1},"call_id":{"type":"string","minLength":1},"topic_id":{"type":["string","null"]},"submission_status":{"type":"string","enum":["forthcoming","open","closed"]},"opens_at":{"type":["string","null"]},"deadline_model":{"type":["string","null"]}},"required":["programme","call_id","topic_id","submission_status","opens_at","deadline_model"],"additionalProperties":false},{"type":"null"}]},"lots":{"type":"array","items":{"type":"object","properties":{"lot_id":{"type":"string"},"source_lot_id":{"type":"string"},"title":{"type":"string"},"deadline_at":{"type":["string","null"]}},"required":["lot_id","source_lot_id","title","deadline_at"],"additionalProperties":false}},"canonical_url":{"type":"string","format":"uri"},"evidence":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"source_url":{"type":"string","format":"uri"},"anchor":{"type":"object","properties":{"section":{"type":"string"}},"required":["section"],"additionalProperties":false}},"required":["text","source_url","anchor"],"additionalProperties":false}}},"required":["opportunity_id","kind","status","title","canonical_path","buyer","deadline","published_value","cpv","nuts","source_url","last_checked_at","lots","canonical_url","evidence"],"additionalProperties":false}},"next_offset":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["mode","reduced_features","interpreted","sort","total","total_capped","results","next_offset"],"additionalProperties":false},"SearchAnswerResponse":{"type":"object","properties":{"mode":{"type":"string","enum":["lexical","hybrid","lexical_only"]},"reduced_features":{"type":"array","items":{"type":"string","enum":["semantic"]}},"interpreted":{"type":"object","properties":{"terms":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["tender","grant"]},"status":{"type":"string"},"cpv":{"type":"array","items":{"type":"string"}},"nuts":{"type":"array","items":{"type":"string"}},"min_value_eur":{"type":"number"},"topic":{"type":"string"},"expanded":{"type":"array","items":{"type":"object","properties":{"term":{"type":"string"},"group":{"type":"string"},"added":{"type":"array","items":{"type":"string"}}},"required":["term","group","added"],"additionalProperties":false}}},"required":["terms"],"additionalProperties":false},"sort":{"type":"string","enum":["relevance","updated","deadline","published"]},"total":{"type":"integer","minimum":0},"total_capped":{"type":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"opportunity_id":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"},"kind":{"type":"string","enum":["tender","grant"]},"status":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]},"title":{"type":"string","minLength":1},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/(tender|grant)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/(ausschreibung|foerderung)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false},"buyer":{"anyOf":[{"type":"object","properties":{"organisation_id":{"type":["string","null"]},"name":{"type":"string"}},"required":["organisation_id","name"],"additionalProperties":false},{"type":"null"}]},"deadline":{"anyOf":[{"type":"object","properties":{"at":{"type":"string","minLength":1},"offset":{"type":["string","null"]}},"required":["at","offset"],"additionalProperties":false},{"type":"null"}]},"published_value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"vat":{"type":"string","const":"excluded"}},"required":["amount","currency","vat"],"additionalProperties":false},{"type":"null"}]},"cpv":{"type":"array","items":{"type":"string"}},"nuts":{"type":"array","items":{"type":"string"}},"source_url":{"type":"string","format":"uri"},"last_checked_at":{"type":"string","minLength":1},"grant":{"anyOf":[{"type":"object","properties":{"programme":{"type":"string","minLength":1},"call_id":{"type":"string","minLength":1},"topic_id":{"type":["string","null"]},"submission_status":{"type":"string","enum":["forthcoming","open","closed"]},"opens_at":{"type":["string","null"]},"deadline_model":{"type":["string","null"]}},"required":["programme","call_id","topic_id","submission_status","opens_at","deadline_model"],"additionalProperties":false},{"type":"null"}]},"lots":{"type":"array","items":{"type":"object","properties":{"lot_id":{"type":"string"},"source_lot_id":{"type":"string"},"title":{"type":"string"},"deadline_at":{"type":["string","null"]}},"required":["lot_id","source_lot_id","title","deadline_at"],"additionalProperties":false}},"canonical_url":{"type":"string","format":"uri"},"evidence":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"source_url":{"type":"string","format":"uri"},"anchor":{"type":"object","properties":{"section":{"type":"string"}},"required":["section"],"additionalProperties":false}},"required":["text","source_url","anchor"],"additionalProperties":false}}},"required":["opportunity_id","kind","status","title","canonical_path","buyer","deadline","published_value","cpv","nuts","source_url","last_checked_at","lots","canonical_url","evidence"],"additionalProperties":false}},"next_offset":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"answer":{"type":"object","properties":{"status":{"type":"string","enum":["answered","not_found","unavailable"]},"label":{"type":"string","minLength":1},"message":{"type":["string","null"]},"reason":{"anyOf":[{"type":"string","enum":["no_results","no_support","off","kill_switch","free_budget","daily_cap","pool","ai_stopped","turnstile_required","busy","timeout","model_failed","error"]},{"type":"null"}]},"resets_at":{"type":["string","null"]},"sentences":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":300},"citations":{"type":"array","items":{"type":"string","pattern":"^r(?:[1-9]|[1-4][0-9]|50)\\.(?:title|buyer|status|deadline|value|cpv|nuts|programme|call|text)$"},"minItems":1,"maxItems":6}},"required":["text","citations"],"additionalProperties":false},"maxItems":4},"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^r(?:[1-9]|[1-4][0-9]|50)\\.(?:title|buyer|status|deadline|value|cpv|nuts|programme|call|text)$"},"opportunity_id":{"type":"string","minLength":1},"field":{"type":"string","enum":["title","buyer","status","deadline","value","cpv","nuts","programme","call","text"]},"text":{"type":"string","minLength":1,"maxLength":400},"canonical_url":{"type":"string","format":"uri"},"source_url":{"type":"string","format":"uri"},"last_checked_at":{"type":"string","minLength":1}},"required":["id","opportunity_id","field","text","canonical_url","source_url","last_checked_at"],"additionalProperties":false}},"model":{"type":"string","minLength":1},"prompt_version":{"type":"string","minLength":1},"cached":{"type":"boolean"},"credits":{"type":"integer","minimum":0,"maximum":1}},"required":["status","label","message","reason","resets_at","sentences","sources","model","prompt_version","cached","credits"],"additionalProperties":false}},"required":["mode","reduced_features","interpreted","sort","total","total_capped","results","next_offset","answer"],"additionalProperties":false},"SuggestResponse":{"type":"object","properties":{"dictionary_revision":{"type":["string","null"]},"suggestions":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"kind":{"type":"string","enum":["topic","cpv","synonym_group","region","buyer","funder","phrase"]},"search":{"type":"object","properties":{"q":{"type":"string","minLength":1,"maxLength":500},"cpv":{"type":"array","items":{"type":"string","pattern":"^\\d{2,8}$"},"maxItems":10},"nuts":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}[A-Z0-9]{0,3}$"},"maxItems":10},"topic":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,63}$"},"kind":{"type":"string","enum":["tender","grant"]}},"additionalProperties":false},"open_count":{"type":"integer","minimum":0}},"required":["text","kind","search","open_count"],"additionalProperties":false}}},"required":["dictionary_revision","suggestions"],"additionalProperties":false},"RelatedResponse":{"type":"object","properties":{"opportunity_id":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"},"results":{"type":"array","items":{"type":"object","properties":{"opportunity_id":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"},"kind":{"type":"string","enum":["tender","grant"]},"status":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]},"title":{"type":"string","minLength":1},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/(tender|grant)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/(ausschreibung|foerderung)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false},"buyer":{"anyOf":[{"type":"object","properties":{"organisation_id":{"type":["string","null"]},"name":{"type":"string"}},"required":["organisation_id","name"],"additionalProperties":false},{"type":"null"}]},"deadline":{"anyOf":[{"type":"object","properties":{"at":{"type":"string","minLength":1},"offset":{"type":["string","null"]}},"required":["at","offset"],"additionalProperties":false},{"type":"null"}]},"published_value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"vat":{"type":"string","const":"excluded"}},"required":["amount","currency","vat"],"additionalProperties":false},{"type":"null"}]},"cpv":{"type":"array","items":{"type":"string"}},"nuts":{"type":"array","items":{"type":"string"}},"source_url":{"type":"string","format":"uri"},"last_checked_at":{"type":"string","minLength":1},"grant":{"anyOf":[{"type":"object","properties":{"programme":{"type":"string","minLength":1},"call_id":{"type":"string","minLength":1},"topic_id":{"type":["string","null"]},"submission_status":{"type":"string","enum":["forthcoming","open","closed"]},"opens_at":{"type":["string","null"]},"deadline_model":{"type":["string","null"]}},"required":["programme","call_id","topic_id","submission_status","opens_at","deadline_model"],"additionalProperties":false},{"type":"null"}]}},"required":["opportunity_id","kind","status","title","canonical_path","buyer","deadline","published_value","cpv","nuts","source_url","last_checked_at"],"additionalProperties":false}}},"required":["opportunity_id","results"],"additionalProperties":false},"CatalogueIndex":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"opportunity_id":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"},"kind":{"type":"string","enum":["tender","grant"]},"status":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/(tender|grant)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/(ausschreibung|foerderung)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false},"lastmod":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"deadline":{"anyOf":[{"type":"object","properties":{"at":{"type":"string","minLength":1},"offset":{"type":["string","null"]}},"required":["at","offset"],"additionalProperties":false},{"type":"null"}]}},"required":["opportunity_id","kind","status","canonical_path","lastmod"],"additionalProperties":false}},"next_cursor":{"type":["string","null"]}},"required":["entries","next_cursor"],"additionalProperties":false},"StatsOverview":{"type":"object","properties":{"opportunities":{"type":"integer","minimum":0},"open":{"type":"integer","minimum":0},"published_last_7_days":{"type":"integer","minimum":0},"closing_next_7_days":{"type":"integer","minimum":0},"sources":{"type":"array","items":{"type":"object","properties":{"source_id":{"type":"string"},"name":{"type":"string"},"last_success_at":{"type":["string","null"]}},"required":["source_id","name","last_success_at"],"additionalProperties":false}},"last_checked_at":{"type":["string","null"]},"caption":{"type":"string","minLength":1}},"required":["opportunities","open","published_last_7_days","closing_next_7_days","sources","last_checked_at","caption"],"additionalProperties":false},"FacetsResponse":{"type":"object","properties":{"facet":{"type":"string","enum":["cpv_division","nuts1","kind","topic"]},"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"rows":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1},"label":{"type":["string","null"]},"opportunities":{"type":"integer","minimum":0},"published_value_eur":{"type":"number","minimum":0},"open":{"type":"integer","minimum":0}},"required":["key","label","opportunities","published_value_eur","open"],"additionalProperties":false}},"caption":{"type":"string","minLength":1}},"required":["facet","from","to","rows","caption"],"additionalProperties":false},"SeriesResponse":{"type":"object","properties":{"facet":{"type":"string","enum":["cpv_division","nuts1","kind","topic"]},"key":{"type":"string","minLength":1},"label":{"type":["string","null"]},"interval":{"type":"string","enum":["day","week","month"]},"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"points":{"type":"array","items":{"type":"object","properties":{"period":{"type":"string","pattern":"^\\d{4}-\\d{2}(-\\d{2})?$"},"opportunities":{"type":"integer","minimum":0},"published_value_eur":{"type":"number","minimum":0},"source":{"type":"string","const":"history"}},"required":["period","opportunities","published_value_eur"],"additionalProperties":false}},"caption":{"type":"string","minLength":1},"history":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["ok","stale","unavailable"]},"label":{"type":"string","minLength":1},"note":{"type":"string","minLength":1},"period":{"anyOf":[{"type":"object","properties":{"from":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$"},"to":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$"}},"required":["from","to"],"additionalProperties":false},{"type":"null"}]},"computed_at":{"type":["string","null"]},"stale":{"type":"boolean"},"message":{"type":["string","null"]}},"required":["status","label","note","period","computed_at","stale","message"],"additionalProperties":false},{"type":"null"}]}},"required":["facet","key","label","interval","from","to","points","caption"],"additionalProperties":false},"CombinationsResponse":{"type":"object","properties":{"a":{"type":"string","const":"cpv_division"},"b":{"type":"string","const":"nuts1"},"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"rows":{"type":"array","items":{"type":"object","properties":{"a":{"type":"string","pattern":"^\\d{2}$"},"b":{"type":"string","pattern":"^DE[0-9A-Z]$"},"open":{"type":"integer","minimum":0},"opportunities":{"type":"integer","minimum":0}},"required":["a","b","open","opportunities"],"additionalProperties":false}},"caption":{"type":"string","minLength":1}},"required":["a","b","from","to","rows","caption"],"additionalProperties":false},"TopBuyersResponse":{"type":"object","properties":{"filters":{"type":"object","properties":{"cpv_division":{"anyOf":[{"type":"string","pattern":"^\\d{2}$"},{"type":"null"}]},"nuts1":{"anyOf":[{"type":"string","pattern":"^DE[0-9A-Z]$"},{"type":"null"}]},"topic":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]}},"required":["cpv_division","nuts1","topic"],"additionalProperties":false},"open":{"type":"integer","minimum":0},"rows":{"type":"array","items":{"type":"object","properties":{"organisation_id":{"type":["string","null"]},"name":{"type":"string","minLength":1},"open":{"type":"integer","exclusiveMinimum":0}},"required":["organisation_id","name","open"],"additionalProperties":false}},"caption":{"type":"string","minLength":1}},"required":["filters","open","rows","caption"],"additionalProperties":false},"TopicOpportunities":{"type":"object","properties":{"topic_id":{"type":"string"},"total":{"type":"integer","minimum":0},"results":{"type":"array","items":{"type":"object","properties":{"opportunity_id":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"},"kind":{"type":"string","enum":["tender","grant"]},"status":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]},"title":{"type":"string","minLength":1},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/(tender|grant)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/(ausschreibung|foerderung)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false},"buyer":{"anyOf":[{"type":"object","properties":{"organisation_id":{"type":["string","null"]},"name":{"type":"string"}},"required":["organisation_id","name"],"additionalProperties":false},{"type":"null"}]},"deadline":{"anyOf":[{"type":"object","properties":{"at":{"type":"string","minLength":1},"offset":{"type":["string","null"]}},"required":["at","offset"],"additionalProperties":false},{"type":"null"}]},"published_value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"vat":{"type":"string","const":"excluded"}},"required":["amount","currency","vat"],"additionalProperties":false},{"type":"null"}]},"cpv":{"type":"array","items":{"type":"string"}},"nuts":{"type":"array","items":{"type":"string"}},"source_url":{"type":"string","format":"uri"},"last_checked_at":{"type":"string","minLength":1},"grant":{"anyOf":[{"type":"object","properties":{"programme":{"type":"string","minLength":1},"call_id":{"type":"string","minLength":1},"topic_id":{"type":["string","null"]},"submission_status":{"type":"string","enum":["forthcoming","open","closed"]},"opens_at":{"type":["string","null"]},"deadline_model":{"type":["string","null"]}},"required":["programme","call_id","topic_id","submission_status","opens_at","deadline_model"],"additionalProperties":false},{"type":"null"}]},"lots":{"type":"array","items":{"type":"object","properties":{"lot_id":{"type":"string"},"source_lot_id":{"type":"string"},"title":{"type":"string"},"deadline_at":{"type":["string","null"]}},"required":["lot_id","source_lot_id","title","deadline_at"],"additionalProperties":false}},"canonical_url":{"type":"string","format":"uri"},"evidence":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"source_url":{"type":"string","format":"uri"},"anchor":{"type":"object","properties":{"section":{"type":"string"}},"required":["section"],"additionalProperties":false}},"required":["text","source_url","anchor"],"additionalProperties":false}}},"required":["opportunity_id","kind","status","title","canonical_path","buyer","deadline","published_value","cpv","nuts","source_url","last_checked_at","lots","canonical_url","evidence"],"additionalProperties":false}}},"required":["topic_id","total","results"],"additionalProperties":false},"OpportunityMatches":{"type":"object","properties":{"opportunity_id":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"coverage":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"weights_version":{"type":["string","null"]},"fairness_version":{"type":["string","null"]},"computed_at":{"type":["string","null"]},"matches":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0},"tier":{"type":"string","enum":["sme","unknown_size","incumbent"]},"incumbent":{"type":"boolean"},"discovery":{"type":"boolean"},"score":{"type":"number"},"confidence":{"type":"number"},"components":{"type":"object","properties":{"capability":{"type":["number","null"]},"region":{"type":["number","null"]},"scale":{"type":["number","null"]},"requirements":{"type":["number","null"]},"track_record":{"type":["number","null"]}},"required":["capability","region","scale","requirements","track_record"],"additionalProperties":false},"reasons":{"type":"array","items":{"type":"object","properties":{"feature":{"type":"string","enum":["capability","region","scale","requirements","track_record"]},"text":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"evidence_url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["feature","text","evidence_url","checked_at"],"additionalProperties":false},"minItems":1},"labels":{"type":"array","items":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false}},"organisation_id":{"type":"string","pattern":"^org_[0-9A-Z]{26}$"},"name":{"type":"string","minLength":1},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/company\\/org_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/unternehmen\\/org_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false},"city":{"type":["string","null"]}},"required":["rank","tier","incumbent","discovery","score","confidence","components","reasons","labels","organisation_id","name","canonical_path","city"],"additionalProperties":false}}},"required":["opportunity_id","label","coverage","weights_version","fairness_version","computed_at","matches"],"additionalProperties":false},"CompanyProfile":{"type":"object","properties":{"organisation_id":{"type":"string","pattern":"^org_[0-9A-Z]{26}$"},"name":{"type":"string","minLength":1},"other_names":{"type":"array","items":{"type":"string"}},"legal_form":{"type":["string","null"]},"entity_kind":{"type":"string","enum":["company","public_body"]},"size_class":{"anyOf":[{"type":"string","enum":["micro","small","medium","sme","large"]},{"type":"null"}]},"city":{"type":["string","null"]},"country":{"type":["string","null"]},"nuts":{"type":["string","null"]},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/company\\/org_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/unternehmen\\/org_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false},"identifiers":{"type":"array","items":{"type":"object","properties":{"scheme":{"type":"string","enum":["lei","vat","de-hr","leitweg"]},"id":{"type":"string","minLength":1}},"required":["scheme","id"],"additionalProperties":false}},"website":{"anyOf":[{"type":"object","properties":{"url":{"type":"string","format":"uri"},"verified":{"type":"boolean"},"checked_at":{"type":["string","null"]}},"required":["url","verified","checked_at"],"additionalProperties":false},{"type":"null"}]},"linkedin":{"anyOf":[{"type":"object","properties":{"url":{"type":"string","format":"uri"},"verified":{"type":"boolean"},"checked_at":{"type":"string","minLength":1}},"required":["url","verified","checked_at"],"additionalProperties":false},{"type":"null"}]},"logo":{"anyOf":[{"type":"object","properties":{"url":{"type":"string","pattern":"^\\/v1\\/logos\\/[0-9a-f]{64}\\.png$"},"source_url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["url","source_url","checked_at"],"additionalProperties":false},{"type":"null"}]},"certifications":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"state":{"type":"string","enum":["verified","self_declared"]},"source_url":{"type":"string","format":"uri"},"quote":{"type":["string","null"]},"checked_at":{"type":"string","minLength":1}},"required":["code","label","state","source_url","quote","checked_at"],"additionalProperties":false}},"track_window_months":{"type":"number","const":36},"track":{"type":"array","items":{"type":"object","properties":{"cpv_division":{"type":"string","pattern":"^\\d{2}$"},"label":{"type":["string","null"]},"awards":{"type":"integer","minimum":0},"value_eur":{"type":"number","minimum":0},"buyers":{"type":"integer","minimum":0},"repeat_buyers":{"type":"integer","minimum":0},"first_award_at":{"type":["string","null"]},"last_award_at":{"type":["string","null"]}},"required":["cpv_division","label","awards","value_eur","buyers","repeat_buyers","first_award_at","last_award_at"],"additionalProperties":false}},"awards_total":{"type":"integer","minimum":0},"awards":{"type":"array","items":{"type":"object","properties":{"opportunity_id":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"},"title":{"type":"string","minLength":1},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/(tender|grant)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/(ausschreibung|foerderung)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false},"buyer_name":{"type":["string","null"]},"value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"vat":{"type":"string","const":"excluded"}},"required":["amount","currency","vat"],"additionalProperties":false},{"type":"null"}]},"cpv":{"type":["string","null"]},"awarded_at":{"type":["string","null"]}},"required":["opportunity_id","title","canonical_path","buyer_name","value","cpv","awarded_at"],"additionalProperties":false}},"matches":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0},"tier":{"type":"string","enum":["sme","unknown_size","incumbent"]},"incumbent":{"type":"boolean"},"discovery":{"type":"boolean"},"score":{"type":"number"},"confidence":{"type":"number"},"components":{"type":"object","properties":{"capability":{"type":["number","null"]},"region":{"type":["number","null"]},"scale":{"type":["number","null"]},"requirements":{"type":["number","null"]},"track_record":{"type":["number","null"]}},"required":["capability","region","scale","requirements","track_record"],"additionalProperties":false},"reasons":{"type":"array","items":{"type":"object","properties":{"feature":{"type":"string","enum":["capability","region","scale","requirements","track_record"]},"text":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"evidence_url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["feature","text","evidence_url","checked_at"],"additionalProperties":false},"minItems":1},"labels":{"type":"array","items":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false}},"opportunity":{"type":"object","properties":{"opportunity_id":{"type":"string","pattern":"^[a-z]{2,4}_[0-9A-Z]{26}$"},"kind":{"type":"string","enum":["tender","grant"]},"status":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]},"title":{"type":"string","minLength":1},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/(tender|grant)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/(ausschreibung|foerderung)\\/[a-z]{2,4}_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false},"buyer":{"anyOf":[{"type":"object","properties":{"organisation_id":{"type":["string","null"]},"name":{"type":"string"}},"required":["organisation_id","name"],"additionalProperties":false},{"type":"null"}]},"deadline":{"anyOf":[{"type":"object","properties":{"at":{"type":"string","minLength":1},"offset":{"type":["string","null"]}},"required":["at","offset"],"additionalProperties":false},{"type":"null"}]},"published_value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"vat":{"type":"string","const":"excluded"}},"required":["amount","currency","vat"],"additionalProperties":false},{"type":"null"}]},"cpv":{"type":"array","items":{"type":"string"}},"nuts":{"type":"array","items":{"type":"string"}},"source_url":{"type":"string","format":"uri"},"last_checked_at":{"type":"string","minLength":1},"grant":{"anyOf":[{"type":"object","properties":{"programme":{"type":"string","minLength":1},"call_id":{"type":"string","minLength":1},"topic_id":{"type":["string","null"]},"submission_status":{"type":"string","enum":["forthcoming","open","closed"]},"opens_at":{"type":["string","null"]},"deadline_model":{"type":["string","null"]}},"required":["programme","call_id","topic_id","submission_status","opens_at","deadline_model"],"additionalProperties":false},{"type":"null"}]}},"required":["opportunity_id","kind","status","title","canonical_path","buyer","deadline","published_value","cpv","nuts","source_url","last_checked_at"],"additionalProperties":false}},"required":["rank","tier","incumbent","discovery","score","confidence","components","reasons","labels","opportunity"],"additionalProperties":false}},"match_label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"coverage":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"claim":{"type":"object","properties":{"status":{"type":"string","const":"soon"}},"required":["status"],"additionalProperties":false},"supplier_score":{"anyOf":[{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":100},"scale":{"type":"number","const":100},"coverage":{"type":"number","minimum":0,"maximum":1,"description":"The share of the criteria's points Inteliwert could check"},"basis":{"type":"string","enum":["public","consented"]},"version":{"type":"string","minLength":1},"computed_at":{"type":"string","format":"date-time"},"criteria":{"type":"array","items":{"type":"object","properties":{"criterion":{"type":"string","enum":["verified_supplier","claimed_profile","certifications","website_basics","machine_readable","agent_access","products_services","pricing_page","pricing_model","kept_current","capacity_location"]},"points":{"type":"integer","minimum":0,"maximum":15},"max":{"type":"integer","minimum":1,"maximum":15},"state":{"type":"string","enum":["met","partial","missing","not_checked"]},"evidence_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The page of the company's website, or the DNS record (dns:_inteliwert-challenge.<domain>?type=TXT), that is the evidence"},"checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["criterion","points","max","state","evidence_url","checked_at"],"additionalProperties":false},"minItems":11,"maxItems":11}},"required":["total","scale","coverage","basis","version","computed_at","criteria"],"additionalProperties":false,"description":"Supplier profile score (E-51): points for what a supplier controls and Inteliwert can check, each with its evidence and check time; not a rating of quality, fit or eligibility"},{"type":"null"}],"description":"Supplier profile score (E-51): points for what a supplier controls and Inteliwert can check, each with its evidence and check time; not a rating of quality, fit or eligibility"},"indexable":{"type":"boolean"},"last_checked_at":{"type":"string","minLength":1}},"required":["organisation_id","name","other_names","legal_form","entity_kind","size_class","city","country","nuts","canonical_path","identifiers","website","linkedin","certifications","track_window_months","track","awards_total","awards","matches","match_label","coverage","claim","indexable","last_checked_at"],"additionalProperties":false},"CompanyIndex":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"organisation_id":{"type":"string","pattern":"^org_[0-9A-Z]{26}$"},"canonical_path":{"type":"object","properties":{"en":{"type":"string","pattern":"^\\/company\\/org_[0-9A-Z]{26}\\/[a-z0-9-]+$"},"de":{"type":"string","pattern":"^\\/de\\/unternehmen\\/org_[0-9A-Z]{26}\\/[a-z0-9-]+$"}},"required":["en","de"],"additionalProperties":false},"lastmod":{"type":["string","null"]}},"required":["organisation_id","canonical_path","lastmod"],"additionalProperties":false}},"next_cursor":{"type":["string","null"]}},"required":["entries","next_cursor"],"additionalProperties":false},"AccountExport":{"type":"object","properties":{"format":{"type":"string","const":"inteliwert.account-export.v1"},"exported_at":{"type":"string","description":"ISO 8601 time"},"account":{"type":"object","properties":{"account_id":{"type":"string"},"email":{"type":["string","null"]},"created_at":{"type":"string","description":"ISO 8601 time"}},"required":["account_id","email","created_at"],"additionalProperties":false},"sign_in":{"type":"object","properties":{"providers":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"linked_at":{"type":"string","description":"ISO 8601 time"},"last_used_at":{"type":"string","description":"ISO 8601 time"}},"required":["provider","linked_at","last_used_at"],"additionalProperties":false}},"sessions":{"type":"array","items":{"type":"object","properties":{"started_at":{"type":"string","description":"ISO 8601 time"},"expires_at":{"type":"string","description":"ISO 8601 time"},"ended_at":{"type":["string","null"],"description":"ISO 8601 time, or null"}},"required":["started_at","expires_at","ended_at"],"additionalProperties":false},"description":"The newest 100 sessions; never a session's hash"}},"required":["providers","sessions"],"additionalProperties":false},"workspaces":{"type":"array","items":{"type":"object","properties":{"workspace_id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"joined_at":{"type":"string","description":"ISO 8601 time"},"created_at":{"type":"string","description":"ISO 8601 time"},"onboarded_at":{"type":["string","null"],"description":"ISO 8601 time, or null"},"seats":{"type":"integer"},"companies":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string"},"side":{"type":"string"},"status":{"type":"string"},"organisation_id":{"type":["string","null"]},"entered":{"description":"The profile as entered, for a pending company"},"entered_by_you":{"type":"boolean"},"created_at":{"type":"string","description":"ISO 8601 time"},"updated_at":{"type":"string","description":"ISO 8601 time"}},"required":["role","side","status","organisation_id","entered_by_you","created_at","updated_at"],"additionalProperties":false}}},"required":["workspace_id","name","role","joined_at","created_at","onboarded_at","seats","companies"],"additionalProperties":false}},"entitlements":{"type":"array","items":{"type":"object","properties":{"workspace_id":{"type":["string","null"]},"plan":{"type":"string"},"state":{"type":"string"},"policy_version":{"type":"string"},"valid_from":{"type":"string","description":"ISO 8601 time"},"valid_to":{"type":["string","null"],"description":"ISO 8601 time, or null"}},"required":["workspace_id","plan","state","policy_version","valid_from","valid_to"],"additionalProperties":false}},"subscriptions":{"type":"array","items":{"type":"object","properties":{"workspace_id":{"type":"string"},"plan":{"type":"string"},"interval":{"type":"string"},"quantity":{"type":"integer"},"state":{"type":"string"},"current_period_end":{"type":["string","null"],"description":"ISO 8601 time, or null"},"cancel_at_period_end":{"type":"boolean"}},"required":["workspace_id","plan","interval","quantity","state","current_period_end","cancel_at_period_end"],"additionalProperties":false},"description":"The workspace's plans, for an owner or admin"},"saved_searches":{"type":"array","items":{"type":"object","properties":{"saved_search_id":{"type":"string"},"workspace_id":{"type":"string"},"name":{"type":["string","null"]},"request":{"description":"The words and filters; null once deleted (nothing is kept)"},"lang":{"type":"string"},"created_at":{"type":"string","description":"ISO 8601 time"},"deleted_at":{"type":["string","null"],"description":"ISO 8601 time, or null"},"subscription":{"anyOf":[{"type":"object","properties":{"frequency":{"type":["string","null"]},"state":{"type":"string"},"subscribed_at":{"type":["string","null"],"description":"ISO 8601 time, or null"},"unsubscribed_at":{"type":["string","null"],"description":"ISO 8601 time, or null"},"last_sent_at":{"type":["string","null"],"description":"ISO 8601 time, or null"},"next_due_at":{"type":["string","null"],"description":"ISO 8601 time, or null"}},"required":["frequency","state","subscribed_at","unsubscribed_at","last_sent_at","next_due_at"],"additionalProperties":false},{"type":"null"}]},"opportunities_followed":{"type":"integer"},"consents":{"type":"array","items":{"type":"object","properties":{"consent_id":{"type":"string"},"purpose":{"type":"string"},"channel":{"type":"string"},"wording_version":{"type":"string"},"given_at":{"type":"string","description":"ISO 8601 time"},"confirmation_sent_at":{"type":["string","null"],"description":"ISO 8601 time, or null"},"confirmed_at":{"type":["string","null"],"description":"ISO 8601 time, or null"},"withdrawn_at":{"type":["string","null"],"description":"ISO 8601 time, or null"}},"required":["consent_id","purpose","channel","wording_version","given_at","confirmation_sent_at","confirmed_at","withdrawn_at"],"additionalProperties":false}}},"required":["saved_search_id","workspace_id","name","lang","created_at","deleted_at","subscription","opportunities_followed","consents"],"additionalProperties":false}},"alert_deliveries":{"type":"array","items":{"type":"object","properties":{"delivery_id":{"type":"string"},"saved_search_id":{"type":"string"},"state":{"type":"string"},"reason":{"type":["string","null"]},"opportunity_ids":{},"created_at":{"type":"string","description":"ISO 8601 time"},"sent_at":{"type":["string","null"],"description":"ISO 8601 time, or null"}},"required":["delivery_id","saved_search_id","state","reason","created_at","sent_at"],"additionalProperties":false},"description":"The newest 2,000"},"usage_by_day":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"operation":{"type":"string"},"status":{"type":"string"},"events":{"type":"integer"},"credits":{"type":"number"}},"required":["day","operation","status","events","credits"],"additionalProperties":false},"description":"The usage ledger per day, operation and status; it holds no request words"},"connections":{"anyOf":[{"type":"array","items":{"type":"object","additionalProperties":{}}},{"type":"null"}],"description":"The connected assistants as `GET /v1/account/connections` lists them; null while sign-in for assistants is off"},"truncated":{"type":"array","items":{"type":"string","enum":["sessions","saved_searches","deliveries","usage"]},"description":"The lists cut at their bound"},"not_included":{"type":"array","items":{"type":"string"}}},"required":["format","exported_at","account","sign_in","workspaces","entitlements","subscriptions","saved_searches","alert_deliveries","usage_by_day","connections","truncated","not_included"],"additionalProperties":false},"AccountDeleteRequest":{"type":"object","properties":{"confirm":{"type":"string","maxLength":254,"description":"The account's email address, typed again"},"csrf":{"type":"string","description":"The CSRF token, unless the `X-CSRF-Token` header carries it"}},"required":["confirm"],"additionalProperties":false},"AccountDeleted":{"type":"object","properties":{"status":{"type":"string","const":"deleted"},"deleted_at":{"type":"string","description":"ISO 8601 time"}},"required":["status","deleted_at"],"additionalProperties":false},"SignInRequest":{"type":"object","properties":{"email":{"type":"string","maxLength":254,"description":"The address to send the link to"},"turnstile":{"type":"string","maxLength":2048,"description":"The Turnstile token of the sign-in page (action `signin`)"},"next":{"type":"string","maxLength":512,"description":"A site path to open after sign-in"}},"required":["email","turnstile"],"additionalProperties":false},"SignInSent":{"type":"object","properties":{"status":{"type":"string","const":"sent"}},"required":["status"],"additionalProperties":false},"Account":{"type":"object","properties":{"account_id":{"type":"string"},"email":{"type":["string","null"]},"workspace_id":{"type":"string"},"role":{"type":"string","enum":["owner","admin","member"]},"entitlement":{"anyOf":[{"type":"object","properties":{"plan":{"type":"string"},"state":{"type":"string"},"policy_version":{"type":"string"}},"required":["plan","state","policy_version"],"additionalProperties":false},{"type":"null"}]},"usage":{"type":"array","items":{"type":"object","properties":{"operation":{"type":"string","enum":["credits","credits_today","top_up"],"description":"`credits`: the workspace's included credits this period (a paid plan's, or a free account's 100 a month); `credits_today`: the caller's daily cap; `top_up`: credits bought on top, only while some are valid"},"used":{"type":"integer","description":"Credits committed"},"allowance":{"type":"integer"},"resets_at":{"type":"string","description":"When the allowance renews; for `top_up`, when the earliest pack expires"}},"required":["operation","used","allowance","resets_at"],"additionalProperties":false},"description":"AI credits used and allowed (accounts-and-usage scope 13)"},"ai_access":{"type":"string","enum":["on","grace","stopped"],"description":"`grace`: the subscription is past due and AI still works; `stopped`: past the 7-day grace, AI actions are refused"},"onboarding":{"type":"string","enum":["pending","done"],"description":"`pending`: the dashboard shows its onboarding dialog until the person picks Free (`POST /v1/account/onboarding`) or pays; `done` once the workspace is onboarded or holds a paid plan in force (E-62)"},"csrf":{"type":"string"}},"required":["account_id","email","workspace_id","role","entitlement","usage","ai_access","onboarding","csrf"],"additionalProperties":false},"SignInProviders":{"type":"object","properties":{"providers":{"type":"array","items":{"type":"string","enum":["google","microsoft","linkedin"]},"description":"The sign-in providers that are on, in display order"}},"required":["providers"],"additionalProperties":false},"PendingSignIn":{"type":"object","properties":{"provider":{"type":"string","enum":["google","microsoft","linkedin"]},"lang":{"type":"string","enum":["en","de"]},"stage":{"type":"string","enum":["email","code"],"description":"`email`: confirm an address; `code`: enter the code mailed to it"},"offered_email":{"type":["string","null"],"description":"The address the provider gave, offered for confirmation"},"email":{"type":["string","null"],"description":"The address the last code went to"},"codes_left":{"type":"integer","description":"Mails (codes or links) this pending sign-in may still send"},"attempts_left":{"type":"integer"},"link_sent":{"type":"boolean","description":"A confirmation link was mailed and still works (`delivery` `link`, E-62)"}},"required":["provider","lang","stage","offered_email","email","codes_left","attempts_left","link_sent"],"additionalProperties":false},"SignedIn":{"type":"object","properties":{"status":{"type":"string","const":"signed_in"},"next":{"type":"string","description":"The path to go to: the sign-in's `next`, else the account page"}},"required":["status","next"],"additionalProperties":false},"OnboardingRequest":{"type":"object","properties":{"choice":{"type":"string","const":"free","description":"Continue free; paying goes through `POST /v1/billing/checkout`"},"csrf":{"type":"string","description":"The CSRF token, unless the `X-CSRF-Token` header carries it"}},"required":["choice"],"additionalProperties":false},"Onboarding":{"type":"object","properties":{"onboarding":{"type":"string","const":"done"}},"required":["onboarding"],"additionalProperties":false},"SavedSearch":{"type":"object","properties":{"saved_search_id":{"type":"string","pattern":"^ss_[0-9A-Z]{26}$"},"name":{"type":"string"},"request":{"type":"object","properties":{"q":{"type":"string"},"filters":{"type":"object","properties":{"kind":{"type":"string","enum":["tender","grant"]},"status":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]},"cpv":{"type":"array","items":{"type":"string","pattern":"^\\d{2,8}$"},"maxItems":10},"nuts":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}[A-Z0-9]{0,3}$"},"maxItems":10},"topic":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,63}$"},"min_value_eur":{"type":"integer","minimum":0,"maximum":999999999999}},"additionalProperties":false}},"required":["q","filters"],"additionalProperties":false},"lang":{"type":"string","enum":["en","de"]},"created_at":{"type":"string"},"subscription":{"type":"object","properties":{"frequency":{"type":"string","enum":["daily","weekly","instant"]},"channel":{"type":"string","enum":["email"]},"state":{"type":"string","enum":["active","paused","unsubscribed"]},"consent":{"type":"string","enum":["pending","confirmed","withdrawn"]},"consent_confirmed_at":{"type":["string","null"]},"next_due_at":{"type":["string","null"]},"last_sent_at":{"type":["string","null"]}},"required":["frequency","channel","state","consent","consent_confirmed_at","next_due_at","last_sent_at"],"additionalProperties":false},"confirmation_sent":{"type":"boolean"}},"required":["saved_search_id","name","request","lang","created_at","subscription"],"additionalProperties":false},"SavedSearchList":{"type":"object","properties":{"saved_searches":{"type":"array","items":{"type":"object","properties":{"saved_search_id":{"type":"string","pattern":"^ss_[0-9A-Z]{26}$"},"name":{"type":"string"},"request":{"type":"object","properties":{"q":{"type":"string"},"filters":{"type":"object","properties":{"kind":{"type":"string","enum":["tender","grant"]},"status":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]},"cpv":{"type":"array","items":{"type":"string","pattern":"^\\d{2,8}$"},"maxItems":10},"nuts":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}[A-Z0-9]{0,3}$"},"maxItems":10},"topic":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,63}$"},"min_value_eur":{"type":"integer","minimum":0,"maximum":999999999999}},"additionalProperties":false}},"required":["q","filters"],"additionalProperties":false},"lang":{"type":"string","enum":["en","de"]},"created_at":{"type":"string"},"subscription":{"type":"object","properties":{"frequency":{"type":"string","enum":["daily","weekly","instant"]},"channel":{"type":"string","enum":["email"]},"state":{"type":"string","enum":["active","paused","unsubscribed"]},"consent":{"type":"string","enum":["pending","confirmed","withdrawn"]},"consent_confirmed_at":{"type":["string","null"]},"next_due_at":{"type":["string","null"]},"last_sent_at":{"type":["string","null"]}},"required":["frequency","channel","state","consent","consent_confirmed_at","next_due_at","last_sent_at"],"additionalProperties":false},"confirmation_sent":{"type":"boolean"}},"required":["saved_search_id","name","request","lang","created_at","subscription"],"additionalProperties":false}},"allowance":{"type":"object","properties":{"used":{"type":"integer"},"limit":{"type":"integer"}},"required":["used","limit"],"additionalProperties":false}},"required":["saved_searches","allowance"],"additionalProperties":false},"WorkspaceCompany":{"type":"object","properties":{"side":{"anyOf":[{"type":"string","enum":["sell","procure"]},{"type":"null"}]},"status":{"type":"string","enum":["linked","pending","none"]},"organisation":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^org_[0-9A-Z]{26}$"},"name":{"type":"string"},"register":{"type":["string","null"]},"city":{"type":["string","null"]},"logo":{"anyOf":[{"type":"object","properties":{"url":{"type":"string","pattern":"^\\/v1\\/logos\\/[0-9a-f]{64}\\.png$"},"source_url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["url","source_url","checked_at"],"additionalProperties":false},{"type":"null"}]}},"required":["id","name","register","city"],"additionalProperties":false},{"type":"null"}]},"pending":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"website":{"anyOf":[{"type":"string","maxLength":240},{"type":"null"}]},"register":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"lei":{"anyOf":[{"type":"string","pattern":"^[A-Z0-9]{18}[0-9]{2}$"},{"type":"null"}]},"categories":{"type":"array","items":{"type":"string","pattern":"^\\d{8}(-\\d)?$"},"maxItems":10,"description":"CPV codes the company says it offers"},"regions":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}[A-Z0-9]{0,3}$"},"maxItems":10,"description":"NUTS codes the company says it serves"}},"required":["name","website","register","lei","categories","regions"],"additionalProperties":false},{"type":"null"}]},"website":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"The company's website on record: the pending profile's, the one the workspace added, or the organisation's own; null offers \"Add your website\""},"score":{"anyOf":[{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":100},"scale":{"type":"number","const":100},"coverage":{"type":"number","minimum":0,"maximum":1,"description":"The share of the criteria's points Inteliwert could check"},"basis":{"type":"string","enum":["public","consented"]},"version":{"type":"string","minLength":1},"computed_at":{"type":"string","format":"date-time"},"criteria":{"type":"array","items":{"type":"object","properties":{"criterion":{"type":"string","enum":["verified_supplier","claimed_profile","certifications","website_basics","machine_readable","agent_access","products_services","pricing_page","pricing_model","kept_current","capacity_location"]},"points":{"type":"integer","minimum":0,"maximum":15},"max":{"type":"integer","minimum":1,"maximum":15},"state":{"type":"string","enum":["met","partial","missing","not_checked"]},"evidence_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The page of the company's website, or the DNS record (dns:_inteliwert-challenge.<domain>?type=TXT), that is the evidence"},"checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["criterion","points","max","state","evidence_url","checked_at"],"additionalProperties":false},"minItems":11,"maxItems":11}},"required":["total","scale","coverage","basis","version","computed_at","criteria"],"additionalProperties":false,"description":"Supplier profile score (E-51): points for what a supplier controls and Inteliwert can check, each with its evidence and check time; not a rating of quality, fit or eligibility"},{"type":"null"}],"description":"The organisation's supplier score; null while pending or not scored yet"},"updated_at":{"type":["string","null"]}},"required":["side","status","organisation","pending","website","score","updated_at"],"additionalProperties":false,"description":"The workspace's own company: a private pointer, never a public claim (E-64)"},"WorkspaceCompanyRequest":{"anyOf":[{"type":"object","properties":{"side":{"type":"string","enum":["sell","procure"]},"organisation_id":{"type":"string","pattern":"^org_[0-9A-Z]{26}$"},"website":{"type":"string","maxLength":200,"description":"The company's own website, when the catalogue holds none: an http(s) address, never a free-mail provider's or a platform's"},"csrf":{"type":"string"}},"required":["side","organisation_id"],"additionalProperties":false},{"type":"object","properties":{"side":{"type":"string","enum":["sell","procure"]},"pending":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"website":{"type":"string","maxLength":200,"description":"Required: the company's own website, an http(s) address, never a free-mail provider's or a platform's"},"register":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"lei":{"anyOf":[{"type":"string","pattern":"^[A-Z0-9]{18}[0-9]{2}$"},{"type":"null"}]},"categories":{"type":"array","items":{"type":"string","pattern":"^\\d{8}(-\\d)?$"},"maxItems":10,"description":"CPV codes the company says it offers"},"regions":{"type":"array","items":{"type":"string","pattern":"^[A-Z]{2}[A-Z0-9]{0,3}$"},"maxItems":10,"description":"NUTS codes the company says it serves"}},"required":["name","website"],"additionalProperties":false},"csrf":{"type":"string"}},"required":["side","pending"],"additionalProperties":false}]},"CompanySuggestResponse":{"type":"object","properties":{"side":{"type":"string","enum":["sell","procure"]},"domain":{"type":["string","null"]},"suggestions":{"type":"array","items":{"type":"object","properties":{"organisation_id":{"type":"string","pattern":"^org_[0-9A-Z]{26}$"},"name":{"type":"string"},"register":{"type":["string","null"]},"city":{"type":["string","null"]},"domain":{"type":["string","null"]},"via":{"type":"string","enum":["email_domain","search"]}},"required":["organisation_id","name","register","city","domain","via"],"additionalProperties":false},"maxItems":10}},"required":["side","domain","suggestions"],"additionalProperties":false},"MarketView":{"type":"object","properties":{"view":{"type":"string","const":"market"},"side":{"type":"string","enum":["sell","procure"]},"centre":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["company","authority"]},"label":{"type":"string"},"little_data":{"type":"boolean"},"logo":{"anyOf":[{"type":"string","pattern":"^\\/v1\\/logos\\/[0-9a-f]{64}\\.png$"},{"type":"null"}]}},"required":["id","kind","label","little_data"],"additionalProperties":false},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"coverage":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"},"period":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"],"additionalProperties":false},{"type":"null"}]},"sources":{"type":"array","items":{"type":"string"}}},"required":["en","de","period","sources"],"additionalProperties":false},"sectors":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["tenders","grants","buyers","competitors","partners","procedures","suppliers","possible_suppliers","similar_buyers","contracts_ending"]},"count":{"type":"integer","minimum":0},"shown":{"type":"integer","minimum":0},"empty":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false}},"required":["key","count","shown"],"additionalProperties":false}},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["company","authority","tender","grant","buyer"]},"sector":{"type":"string","enum":["tenders","grants","buyers","competitors","partners","procedures","suppliers","possible_suppliers","similar_buyers","contracts_ending"]},"label":{"type":"string"},"band":{"type":"string","enum":["strong","good","worth_a_look"]},"value":{"type":["number","null"]},"value_kind":{"type":"string","enum":["published","observed_awarded","none"]},"badges":{"type":"array","items":{"type":"string","enum":["deadline_soon","new","contract_ending","watched","has_folder"]},"maxItems":2},"reason_ids":{"type":"array","items":{"type":"string"}},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["url","checked_at"],"additionalProperties":false},"minItems":1},"deadline":{"type":["string","null"]},"logo":{"anyOf":[{"type":"string","pattern":"^\\/v1\\/logos\\/[0-9a-f]{64}\\.png$"},{"type":"null"}]}},"required":["id","kind","sector","label","value","value_kind","badges","reason_ids","sources"],"additionalProperties":false},"maxItems":300},"edges":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"kind":{"type":"string","enum":["spoke","buys","awarded_to","bid","owns","consortium","subcontracts","shared_buyers","similar","programme_call","call_topic"]},"evidence":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["url","checked_at"],"additionalProperties":false}},"required":["from","to","kind","evidence"],"additionalProperties":false}},"reasons":{"type":"object","additionalProperties":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"},"evidence_url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["en","de","evidence_url","checked_at"],"additionalProperties":false}},"clusters":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"count":{"type":"number"}},"required":["key","label","count"],"additionalProperties":false}},"truncated":{"type":"boolean"},"computed_at":{"type":"string"},"versions":{"type":"object","properties":{"views":{"type":"string"},"weights":{"type":"string"},"fairness":{"type":"string"}},"required":["views","weights","fairness"],"additionalProperties":false}},"required":["view","side","centre","label","coverage","sectors","nodes","edges","reasons","clusters","truncated","computed_at","versions"],"additionalProperties":false,"description":"My market: the workspace's company at the centre, its sectors and their members in bands, each with its reasons and sources (graph-views scope 2)"},"CrawlConsentView":{"type":"object","properties":{"eligible":{"anyOf":[{"type":"object","properties":{"domain":{"type":"string"},"verified_by":{"type":"string","enum":["email_domain","dns"]}},"required":["domain","verified_by"],"additionalProperties":false},{"type":"null"}],"description":"The domain a consent would cover: the sign-in address's registrable domain when it is the company website's, or a domain the workspace verified by DNS"},"reason":{"anyOf":[{"type":"string","enum":["no_company","no_website","free_mail","other_domain"]},{"type":"null"}]},"consent":{"anyOf":[{"type":"object","properties":{"domain":{"type":"string"},"scope":{"type":"string","enum":["deep_crawl"]},"verified_by":{"type":"string","enum":["email_domain","dns"]},"text_version":{"type":"string"},"granted_at":{"type":"string","format":"date-time"},"granted_by_you":{"type":"boolean"}},"required":["domain","scope","verified_by","text_version","granted_at","granted_by_you"],"additionalProperties":false},{"type":"null"}]},"crawl":{"anyOf":[{"type":"object","properties":{"crawl_id":{"type":"string","pattern":"^crl_[0-9A-Z]{26}$"},"domain":{"type":"string"},"state":{"type":"string","enum":["queued","running","done","failed","stopped"]},"max_depth":{"type":"integer","minimum":0},"page_budget":{"type":"integer","minimum":1},"requested_at":{"type":"string","format":"date-time"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"next_allowed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"When the next deep crawl may be asked for; null when it may now"},"counts":{"anyOf":[{"type":"object","properties":{"pages_found":{"type":"integer","minimum":0},"pages_read":{"type":"integer","minimum":0},"pages_skipped":{"type":"integer","minimum":0},"facts":{"type":"integer","minimum":0}},"required":["pages_found","pages_read","pages_skipped","facts"],"additionalProperties":false},{"type":"null"}]}},"required":["crawl_id","domain","state","max_depth","page_budget","requested_at","started_at","finished_at","next_allowed_at","counts"],"additionalProperties":false,"description":"One deep crawl of the workspace's own website"},{"type":"null"}],"description":"One deep crawl of the workspace's own website"},"text_version":{"type":"string","const":"deep-crawl-2026-11-04"}},"required":["eligible","reason","consent","crawl","text_version"],"additionalProperties":false,"description":"The deep-crawl consent of the workspace's own company (E-83): private, never published"},"ConsentGrantRequest":{"type":"object","properties":{"domain":{"type":"string","maxLength":253},"text_version":{"type":"string","const":"deep-crawl-2026-11-04"},"csrf":{"type":"string"}},"required":["domain","text_version"],"additionalProperties":false},"CrawlStatus":{"type":"object","properties":{"crawl_id":{"type":"string","pattern":"^crl_[0-9A-Z]{26}$"},"domain":{"type":"string"},"state":{"type":"string","enum":["queued","running","done","failed","stopped"]},"max_depth":{"type":"integer","minimum":0},"page_budget":{"type":"integer","minimum":1},"requested_at":{"type":"string","format":"date-time"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"next_allowed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"When the next deep crawl may be asked for; null when it may now"},"counts":{"anyOf":[{"type":"object","properties":{"pages_found":{"type":"integer","minimum":0},"pages_read":{"type":"integer","minimum":0},"pages_skipped":{"type":"integer","minimum":0},"facts":{"type":"integer","minimum":0}},"required":["pages_found","pages_read","pages_skipped","facts"],"additionalProperties":false},{"type":"null"}]}},"required":["crawl_id","domain","state","max_depth","page_budget","requested_at","started_at","finished_at","next_allowed_at","counts"],"additionalProperties":false,"description":"One deep crawl of the workspace's own website"},"CompanyChainView":{"type":"object","properties":{"organisation_id":{"type":["string","null"]},"name":{"type":["string","null"]},"brands":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["brand","product"]},"name":{"type":"string","minLength":1,"maxLength":200},"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"logo":{"type":"object","properties":{"asset_url":{"anyOf":[{"type":"string","pattern":"^\\/v1\\/logos\\/[0-9a-f]{64}\\.png$"},{"type":"null"}]},"source_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["asset_url","source_url"],"additionalProperties":false},"basis":{"type":"string","enum":["stated_by_company","impressum","register","gleif"]},"evidence":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","format":"date-time"},"quote":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]}},"required":["url","checked_at","quote"],"additionalProperties":false},"register":{"type":"object","properties":{"state":{"type":"string","enum":["pending","none","entry"]},"de_hr":{"type":["string","null"]},"checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["state","de_hr","checked_at"],"additionalProperties":false}},"required":["kind","name","domain","url","logo","basis","evidence","register"],"additionalProperties":false,"description":"A brand or product of the company, found on its own domain"}},"group":{"type":"array","items":{"type":"object","properties":{"relation":{"type":"string","enum":["parent","subsidiary","group_member","acquired","acquired_by","merged_into","merged"]},"other":{"type":"object","properties":{"organisation_id":{"type":["string","null"]},"name":{"type":"string","minLength":1},"register":{"type":["string","null"]}},"required":["organisation_id","name","register"],"additionalProperties":false},"via":{"anyOf":[{"type":"object","properties":{"organisation_id":{"type":["string","null"]},"name":{"type":"string","minLength":1},"register":{"type":["string","null"]}},"required":["organisation_id","name","register"],"additionalProperties":false},{"type":"null"}],"description":"The group member the relation is of, read from it; null for the company's own"},"basis":{"type":"string","enum":["stated_by_company","impressum","register","gleif"]},"evidence":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","format":"date-time"},"quote":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]}},"required":["url","checked_at","quote"],"additionalProperties":false}},"required":["relation","other","via","basis","evidence"],"additionalProperties":false}},"candidates":{"type":"array","items":{"type":"object","properties":{"domain":{"type":"string"},"url":{"type":"string","format":"uri"},"organisation_id":{"type":["string","null"]},"evidence":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","format":"date-time"},"quote":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]}},"required":["url","checked_at","quote"],"additionalProperties":false}},"required":["domain","url","organisation_id","evidence"],"additionalProperties":false}},"owned_by_person":{"type":"boolean","description":"A person owns a share: shown only as \"owned by a person (not shown)\""}},"required":["organisation_id","name","brands","group","candidates","owned_by_person"],"additionalProperties":false,"description":"The workspace's own company chain (E-84): its brands and products, its group and the domains it links, each with evidence and basis; private until the claim (E-50)"},"PricesInsight":{"type":"object","properties":{"insight":{"type":"string","const":"prices"},"side":{"type":"string","enum":["sell","procure"]},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"definition":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"coverage":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"},"period":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"],"additionalProperties":false},{"type":"null"}]},"sources":{"type":"array","items":{"type":"string"}}},"required":["en","de","period","sources"],"additionalProperties":false},"choices":{"type":"object","properties":{"categories":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false}},"regions":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false}},"buyer_types":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false}}},"required":["categories","regions","buyer_types"],"additionalProperties":false},"truncated":{"type":"boolean"},"computed_at":{"type":"string"},"versions":{"type":"object","properties":{"insights":{"type":"string"}},"required":["insights"],"additionalProperties":false},"comparison":{"type":"object","properties":{"cpv":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"reference":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"nuts":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"buyer_type":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"months":{"type":"integer","minimum":1,"maximum":36},"widened_to":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"widened":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]},"opportunity":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string","format":"uri"}},"required":["id","title","url"],"additionalProperties":false},{"type":"null"}]}},"required":["cpv","reference","nuts","buyer_type","months","widened_to","widened","opportunity"],"additionalProperties":false},"awards":{"type":"integer","minimum":0},"n":{"type":"integer","minimum":0},"stats":{"anyOf":[{"type":"object","properties":{"n":{"type":"integer","minimum":5},"median":{"type":"number"},"p25":{"type":"number"},"p75":{"type":"number"},"p10":{"type":["number","null"]},"p90":{"type":["number","null"]}},"required":["n","median","p25","p75","p10","p90"],"additionalProperties":false,"description":"The median with the middle half from 5 values; P10 and P90 from 20 (percentiles interpolate between ranks)"},{"type":"null"}],"description":"The median with the middle half from 5 values; P10 and P90 from 20 (percentiles interpolate between ranks)"},"values":{"type":"array","items":{"type":"object","properties":{"award_id":{"type":"string"},"opportunity_id":{"type":"string"},"title":{"type":"string"},"value_eur":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"amount":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$"},"value_kind":{"type":"string","enum":["awarded","framework_maximum"]},"framework":{"type":"boolean"},"concluded_at":{"type":"string"},"buyer":{"anyOf":[{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"winner":{"anyOf":[{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["award_id","opportunity_id","title","value_eur","amount","currency","value_kind","framework","concluded_at","buyer","winner","url","checked_at"],"additionalProperties":false},"maxItems":1500},"without_value":{"type":"integer","minimum":0},"other_currency":{"type":"integer","minimum":0},"framework_maximum":{"type":"object","properties":{"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"n":{"type":"integer","minimum":0},"stats":{"anyOf":[{"type":"object","properties":{"n":{"type":"integer","minimum":5},"median":{"type":"number"},"p25":{"type":"number"},"p75":{"type":"number"},"p10":{"type":["number","null"]},"p90":{"type":["number","null"]}},"required":["n","median","p25","p75","p10","p90"],"additionalProperties":false,"description":"The median with the middle half from 5 values; P10 and P90 from 20 (percentiles interpolate between ranks)"},{"type":"null"}],"description":"The median with the middle half from 5 values; P10 and P90 from 20 (percentiles interpolate between ranks)"}},"required":["label","n","stats"],"additionalProperties":false},"estimate_vs_award":{"type":"object","properties":{"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"n":{"type":"integer","minimum":0},"stats":{"anyOf":[{"type":"object","properties":{"n":{"type":"integer","minimum":5},"median":{"type":"number"},"p25":{"type":"number"},"p75":{"type":"number"},"p10":{"type":["number","null"]},"p90":{"type":["number","null"]}},"required":["n","median","p25","p75","p10","p90"],"additionalProperties":false,"description":"The median with the middle half from 5 values; P10 and P90 from 20 (percentiles interpolate between ranks)"},{"type":"null"}],"description":"The median with the middle half from 5 values; P10 and P90 from 20 (percentiles interpolate between ranks)"},"rows":{"type":"array","items":{"type":"object","properties":{"award_id":{"type":"string"},"opportunity_id":{"type":"string"},"title":{"type":"string"},"estimated_eur":{"type":"number","exclusiveMinimum":0},"awarded_eur":{"type":"number","exclusiveMinimum":0},"ratio":{"type":"number","exclusiveMinimum":0},"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["award_id","opportunity_id","title","estimated_eur","awarded_eur","ratio","url","checked_at"],"additionalProperties":false},"maxItems":500}},"required":["label","n","stats","rows"],"additionalProperties":false},"tender_spread":{"type":"object","properties":{"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"rows":{"type":"array","items":{"type":"object","properties":{"award_id":{"type":"string"},"opportunity_id":{"type":"string"},"title":{"type":"string"},"lowest_eur":{"type":"number","exclusiveMinimum":0},"highest_eur":{"type":"number","exclusiveMinimum":0},"received_tenders":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["award_id","opportunity_id","title","lowest_eur","highest_eur","received_tenders","url","checked_at"],"additionalProperties":false},"maxItems":500}},"required":["label","rows"],"additionalProperties":false},"history":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["ok","stale","unavailable"]},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"definition":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"coverage":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"},"period":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"],"additionalProperties":false},{"type":"null"}]},"sources":{"type":"array","items":{"type":"string"}}},"required":["en","de","period","sources"],"additionalProperties":false},"computed_at":{"type":["string","null"]},"stale":{"type":"boolean"},"message":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]},"stats_from":{"anyOf":[{"type":"string","enum":["summary","rows"]},{"type":"null"}]},"truncated":{"type":"boolean"},"stats":{"anyOf":[{"type":"object","properties":{"n":{"type":"integer","minimum":0},"stats":{"anyOf":[{"type":"object","properties":{"n":{"type":"integer","minimum":5},"median":{"type":"number"},"p25":{"type":"number"},"p75":{"type":"number"},"p10":{"type":["number","null"]},"p90":{"type":["number","null"]}},"required":["n","median","p25","p75","p10","p90"],"additionalProperties":false,"description":"The median with the middle half from 5 values; P10 and P90 from 20 (percentiles interpolate between ranks)"},{"type":"null"}],"description":"The median with the middle half from 5 values; P10 and P90 from 20 (percentiles interpolate between ranks)"}},"required":["n","stats"],"additionalProperties":false},{"type":"null"}]},"rows":{"type":"array","items":{"type":"object","properties":{"notice_version_id":{"type":"string","minLength":1},"title":{"type":["string","null"]},"concluded_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"value_eur":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}},"required":["amount","currency"],"additionalProperties":false},{"type":"null"}]},"received_tenders":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"winner_size":{"type":"string","enum":["sme","large","unknown"]},"buyer":{"anyOf":[{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"url":{"type":"string","format":"uri","pattern":"^https:\\/\\/"},"checked_at":{"type":"string","minLength":1}},"required":["notice_version_id","title","concluded_at","value_eur","value","received_tenders","winner_size","buyer","url","checked_at"],"additionalProperties":false},"maxItems":500}},"required":["status","label","definition","coverage","computed_at","stale","message","stats_from","truncated","stats","rows"],"additionalProperties":false,"description":"Prices from the history: awards older than the recent data, each linked to the notice on its source; the same evidence rules (no median below 5, P10 and P90 from 20)"},{"type":"null"}],"description":"Prices from the history: awards older than the recent data, each linked to the notice on its source; the same evidence rules (no median below 5, P10 and P90 from 20)"}},"required":["insight","side","label","definition","coverage","choices","truncated","computed_at","versions","comparison","awards","n","stats","values","without_value","other_currency","framework_maximum","estimate_vs_award","tender_spread"],"additionalProperties":false,"description":"Prices: observed awarded values of comparable awards, each linked to its notice; the median and spread only from 5 values. Never a price recommendation or a prediction (market-insights scope 2.1)"},"CompetitionInsight":{"type":"object","properties":{"insight":{"type":"string","const":"competition"},"side":{"type":"string","enum":["sell","procure"]},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"definition":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"coverage":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"},"period":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"],"additionalProperties":false},{"type":"null"}]},"sources":{"type":"array","items":{"type":"string"}}},"required":["en","de","period","sources"],"additionalProperties":false},"choices":{"type":"object","properties":{"categories":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false}},"regions":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false}},"buyer_types":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false}}},"required":["categories","regions","buyer_types"],"additionalProperties":false},"truncated":{"type":"boolean"},"computed_at":{"type":"string"},"versions":{"type":"object","properties":{"insights":{"type":"string"}},"required":["insights"],"additionalProperties":false},"comparison":{"type":"object","properties":{"cpv":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"reference":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"nuts":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"buyer_type":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"months":{"type":"integer","minimum":1,"maximum":36},"widened_to":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"widened":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]},"opportunity":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string","format":"uri"}},"required":["id","title","url"],"additionalProperties":false},{"type":"null"}]}},"required":["cpv","reference","nuts","buyer_type","months","widened_to","widened","opportunity"],"additionalProperties":false},"caveat":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"n":{"type":"integer","minimum":0},"winners":{"type":"array","items":{"type":"object","properties":{"winner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"awards":{"type":"integer","exclusiveMinimum":0},"value_eur":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"valued":{"type":"integer","minimum":0},"buyers":{"type":"integer","minimum":0},"size":{"type":"string","enum":["sme","large","unknown"]},"overlap":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false}},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["url","checked_at"],"additionalProperties":false},"minItems":1}},"required":["winner","awards","value_eur","valued","buyers","size","overlap","sources"],"additionalProperties":false},"maxItems":20},"winners_total":{"type":"integer","minimum":0},"not_named":{"type":"integer","minimum":0},"received_tenders":{"type":"object","properties":{"n":{"type":"integer","minimum":0},"unknown":{"type":"integer","minimum":0},"stats":{"anyOf":[{"type":"object","properties":{"n":{"type":"integer","minimum":5},"median":{"type":"number"},"p25":{"type":"number"},"p75":{"type":"number"},"p10":{"type":["number","null"]},"p90":{"type":["number","null"]}},"required":["n","median","p25","p75","p10","p90"],"additionalProperties":false,"description":"The median with the middle half from 5 values; P10 and P90 from 20 (percentiles interpolate between ranks)"},{"type":"null"}],"description":"The median with the middle half from 5 values; P10 and P90 from 20 (percentiles interpolate between ranks)"},"buckets":{"type":"array","items":{"type":"object","properties":{"bucket":{"type":"string"},"procedures":{"type":"integer","minimum":0}},"required":["bucket","procedures"],"additionalProperties":false}}},"required":["n","unknown","stats","buckets"],"additionalProperties":false},"single_tender_share":{"anyOf":[{"type":"object","properties":{"procedures":{"type":"integer","minimum":0},"of":{"type":"integer","minimum":5}},"required":["procedures","of"],"additionalProperties":false},{"type":"null"}]},"sme_share":{"anyOf":[{"type":"object","properties":{"sme":{"type":"integer","minimum":0},"large":{"type":"integer","minimum":0},"unknown":{"type":"integer","minimum":0},"of":{"type":"integer","minimum":5}},"required":["sme","large","unknown","of"],"additionalProperties":false},{"type":"null"}]},"repeat_awards":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"buyer":{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"awards":{"type":"integer","minimum":5},"repeat":{"type":"integer","minimum":0},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["url","checked_at"],"additionalProperties":false},"minItems":1}},"required":["buyer","awards","repeat","sources"],"additionalProperties":false}},"below":{"type":"integer","minimum":0}},"required":["rows","below"],"additionalProperties":false},"awards":{"type":"array","items":{"type":"object","properties":{"award_id":{"type":"string"},"opportunity_id":{"type":"string"},"title":{"type":"string"},"winner":{"anyOf":[{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"buyer":{"anyOf":[{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"value_eur":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"received_tenders":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"concluded_at":{"type":"string"},"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["award_id","opportunity_id","title","winner","buyer","value_eur","received_tenders","concluded_at","url","checked_at"],"additionalProperties":false},"maxItems":500},"history":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["ok","stale","unavailable"]},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"definition":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"coverage":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"},"period":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"],"additionalProperties":false},{"type":"null"}]},"sources":{"type":"array","items":{"type":"string"}}},"required":["en","de","period","sources"],"additionalProperties":false},"computed_at":{"type":["string","null"]},"stale":{"type":"boolean"},"message":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]},"stats_from":{"anyOf":[{"type":"string","enum":["summary","rows"]},{"type":"null"}]},"truncated":{"type":"boolean"},"stats":{"anyOf":[{"type":"object","properties":{"received_tenders":{"type":"object","properties":{"n":{"type":"integer","minimum":0},"stats":{"anyOf":[{"type":"object","properties":{"n":{"type":"integer","minimum":5},"median":{"type":"number"},"p25":{"type":"number"},"p75":{"type":"number"},"p10":{"type":["number","null"]},"p90":{"type":["number","null"]}},"required":["n","median","p25","p75","p10","p90"],"additionalProperties":false,"description":"The median with the middle half from 5 values; P10 and P90 from 20 (percentiles interpolate between ranks)"},{"type":"null"}],"description":"The median with the middle half from 5 values; P10 and P90 from 20 (percentiles interpolate between ranks)"}},"required":["n","stats"],"additionalProperties":false},"single_tender_share":{"anyOf":[{"type":"object","properties":{"procedures":{"type":"integer","minimum":0},"of":{"type":"integer","minimum":5}},"required":["procedures","of"],"additionalProperties":false},{"type":"null"}]}},"required":["received_tenders","single_tender_share"],"additionalProperties":false},{"type":"null"}]},"rows":{"type":"array","items":{"type":"object","properties":{"notice_version_id":{"type":"string","minLength":1},"title":{"type":["string","null"]},"concluded_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"value_eur":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}},"required":["amount","currency"],"additionalProperties":false},{"type":"null"}]},"received_tenders":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"winner_size":{"type":"string","enum":["sme","large","unknown"]},"buyer":{"anyOf":[{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"url":{"type":"string","format":"uri","pattern":"^https:\\/\\/"},"checked_at":{"type":"string","minLength":1}},"required":["notice_version_id","title","concluded_at","value_eur","value","received_tenders","winner_size","buyer","url","checked_at"],"additionalProperties":false},"maxItems":500}},"required":["status","label","definition","coverage","computed_at","stale","message","stats_from","truncated","stats","rows"],"additionalProperties":false,"description":"Competition from the history: tenders received per procedure and the single-tender count as x of n, never a share; no winner is named"},{"type":"null"}],"description":"Competition from the history: tenders received per procedure and the single-tender count as x of n, never a share; no winner is named"}},"required":["insight","side","label","definition","coverage","choices","truncated","computed_at","versions","comparison","caveat","n","winners","winners_total","not_named","received_tenders","single_tender_share","sme_share","repeat_awards","awards"],"additionalProperties":false,"description":"Competition: known participation in comparable awards, never a win rate or a market share (market-insights scope 2.2)"},"ContractsEndingInsight":{"type":"object","properties":{"insight":{"type":"string","const":"contracts_ending"},"side":{"type":"string","enum":["sell","procure"]},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"definition":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"coverage":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"},"period":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"],"additionalProperties":false},{"type":"null"}]},"sources":{"type":"array","items":{"type":"string"}}},"required":["en","de","period","sources"],"additionalProperties":false},"choices":{"type":"object","properties":{"categories":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false}},"regions":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false}},"buyer_types":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false}}},"required":["categories","regions","buyer_types"],"additionalProperties":false},"truncated":{"type":"boolean"},"computed_at":{"type":"string"},"versions":{"type":"object","properties":{"insights":{"type":"string"}},"required":["insights"],"additionalProperties":false},"filters":{"type":"object","properties":{"categories":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false}},"nuts":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","minLength":1},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"buyer":{"anyOf":[{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"within_months":{"type":"integer"},"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"until":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"required":["categories","nuts","buyer","within_months","from","until"],"additionalProperties":false},"n":{"type":"integer","minimum":0},"rows":{"type":"array","items":{"type":"object","properties":{"award_id":{"type":"string"},"opportunity_id":{"type":"string"},"title":{"type":"string"},"buyer":{"anyOf":[{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"incumbent":{"anyOf":[{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"value_eur":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}},"required":["amount","currency"],"additionalProperties":false},{"type":"null"}]},"end":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"basis":{"type":"string","enum":["published_end","start_plus_duration","earliest_end"]},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"note":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["date","basis","label","note"],"additionalProperties":false},"extensions":{"anyOf":[{"type":"object","properties":{"max_renewals":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"options":{"type":["string","null"]},"renewal":{"type":["string","null"]},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false}},"required":["max_renewals","options","renewal","label"],"additionalProperties":false},{"type":"null"}]},"category":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["award_id","opportunity_id","title","buyer","incumbent","value_eur","value","end","extensions","category","url","checked_at"],"additionalProperties":false},"maxItems":500},"end_not_published":{"type":"integer","minimum":0},"dates_in_data":{"type":"boolean"},"empty":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]},"history":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["ok","stale","unavailable"]},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"definition":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"coverage":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"},"period":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"],"additionalProperties":false},{"type":"null"}]},"sources":{"type":"array","items":{"type":"string"}}},"required":["en","de","period","sources"],"additionalProperties":false},"computed_at":{"type":["string","null"]},"stale":{"type":"boolean"},"message":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]},"stats_from":{"anyOf":[{"type":"string","enum":["summary","rows"]},{"type":"null"}]},"truncated":{"type":"boolean"},"stats":{"anyOf":[{"type":"object","properties":{"n":{"type":"integer","minimum":0},"from":{"type":"string","pattern":"^\\d{4}-\\d{2}(-\\d{2})?$"},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}(-\\d{2})?$"}},"required":["n","from","to"],"additionalProperties":false},{"type":"null"}]},"rows":{"type":"array","items":{"type":"object","properties":{"notice_version_id":{"type":"string","minLength":1},"title":{"type":["string","null"]},"buyer":{"anyOf":[{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"incumbent":{"anyOf":[{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"value_eur":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"value":{"anyOf":[{"type":"object","properties":{"amount":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}},"required":["amount","currency"],"additionalProperties":false},{"type":"null"}]},"end":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"basis":{"type":"string","const":"published_end"},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"note":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["date","basis","label","note"],"additionalProperties":false},"extensions":{"anyOf":[{"type":"object","properties":{"max_renewals":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"options":{"type":["string","null"]},"renewal":{"type":["string","null"]},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false}},"required":["max_renewals","options","renewal","label"],"additionalProperties":false},{"type":"null"}]},"category":{"anyOf":[{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{2,3}$"},"label":{"anyOf":[{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},{"type":"null"}]}},"required":["code","label"],"additionalProperties":false},{"type":"null"}]},"url":{"type":"string","format":"uri","pattern":"^https:\\/\\/"},"checked_at":{"type":"string","minLength":1}},"required":["notice_version_id","title","buyer","incumbent","value_eur","value","end","extensions","category","url","checked_at"],"additionalProperties":false},"maxItems":500}},"required":["status","label","definition","coverage","computed_at","stale","message","stats_from","truncated","stats","rows"],"additionalProperties":false,"description":"Contracts ending from the history: awards whose notice publishes an end in the window, each linked to the notice on its source. An estimated end, not a new tender"},{"type":"null"}],"description":"Contracts ending from the history: awards whose notice publishes an end in the window, each linked to the notice on its source. An estimated end, not a new tender"}},"required":["insight","side","label","definition","coverage","choices","truncated","computed_at","versions","filters","n","rows","end_not_published","dates_in_data","empty"],"additionalProperties":false,"description":"Contracts ending: awards whose contract may end in the chosen months, each with its end and its precision. An estimated end, not a new tender (market-insights scope 2.4)"},"ConnectRequest":{"type":"object","properties":{"request":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"},"client_name":{"type":"string","minLength":1,"maxLength":200},"client_uri":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}]},"redirect_host":{"type":"string","minLength":1,"maxLength":253},"redirect_origin":{"type":"string","minLength":1,"maxLength":300},"loopback":{"type":"boolean"},"scopes":{"type":"array","items":{"type":"string","enum":["search:read"]},"minItems":1},"email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}]},"csrf":{"type":"string","minLength":1,"maxLength":200}},"required":["request","client_name","client_uri","redirect_host","redirect_origin","loopback","scopes","email","csrf"],"additionalProperties":false},"Connections":{"type":"object","properties":{"connections":{"type":"array","items":{"type":"object","properties":{"connection_id":{"type":"string","minLength":1,"maxLength":200},"client_id":{"type":"string","minLength":1,"maxLength":2048},"client_name":{"type":"string","minLength":1,"maxLength":200},"redirect_host":{"anyOf":[{"type":"string","maxLength":253},{"type":"null"}]},"scopes":{"type":"array","items":{"type":"string","maxLength":100}},"connected_at":{"type":"string"},"expires_at":{"type":["string","null"]}},"required":["connection_id","client_id","client_name","redirect_host","scopes","connected_at","expires_at"],"additionalProperties":false}}},"required":["connections"],"additionalProperties":false},"ViewAnswer":{"type":"object","properties":{"view":{"type":"string","enum":["companies","tenders","tenders-companies"]},"query":{"type":"object","additionalProperties":{"type":["string","number","boolean"]}},"coverage":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"},"period":{"anyOf":[{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"],"additionalProperties":false},{"type":"null"}]},"sources":{"type":"array","items":{"type":"string"}}},"required":["en","de","period","sources"],"additionalProperties":false},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["company","tender","buyer"]},"label":{"type":"string"},"group":{"type":"string"},"rank":{"type":"integer","minimum":0},"band":{"type":"string","enum":["strong","good","worth_a_look"]},"value":{"type":["number","null"]},"value_kind":{"type":"string","enum":["published","observed_awarded","none"]},"badges":{"type":"array","items":{"type":"string","enum":["deadline_soon","new","contract_ending","watched","has_folder"]},"maxItems":2},"reason_ids":{"type":"array","items":{"type":"string"}},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["url","checked_at"],"additionalProperties":false},"minItems":1},"deadline":{"type":["string","null"]},"status":{"type":"string","enum":["open","closed","cancelled","awarded","unknown"]},"cpv":{"type":["string","null"]},"nuts":{"type":["string","null"]},"lots":{"type":"integer","minimum":0}},"required":["id","kind","label","group","rank","value","value_kind","badges","reason_ids","sources"],"additionalProperties":false},"maxItems":300},"edges":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"kind":{"type":"string","enum":["buys","awarded_to","bid","owns","consortium","subcontracts","shared_buyers","similar"]},"assertion":{"type":"string","enum":["reported","inferred"]},"evidence":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["url","checked_at"],"additionalProperties":false},"more_evidence":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["url","checked_at"],"additionalProperties":false},"maxItems":3},"weight":{"type":"integer","minimum":0}},"required":["from","to","kind","assertion","evidence"],"additionalProperties":false},"maxItems":1200},"reasons":{"type":"object","additionalProperties":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"},"evidence_url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1}},"required":["en","de","evidence_url","checked_at"],"additionalProperties":false}},"clusters":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"object","properties":{"en":{"type":"string"},"de":{"type":"string"}},"required":["en","de"],"additionalProperties":false},"count":{"type":"integer","minimum":0},"shown":{"type":"integer","minimum":0}},"required":["key","label","count","shown"],"additionalProperties":false}},"truncated":{"type":"boolean"},"expand":{"type":"string"},"computed_at":{"type":"string"},"versions":{"type":"object","properties":{"views":{"type":"string"}},"required":["views"],"additionalProperties":false}},"required":["view","query","coverage","nodes","edges","reasons","clusters","truncated","computed_at","versions"],"additionalProperties":false,"description":"A view of the graph: nodes, edges with their evidence, reasons and clusters (graph-views scopes 3 and 7). Public evidence only; no band without a centre."}}}}