POST /api/hilma/tenders/search
Price: 20 credits
Search Hilma notices — procurement plans, prior information, contract notices, awards and modifications from every Finnish contracting authority, national and small-value notices included — by keyword, notice kind, form type, CPV and NUTS codes, buyer business id, winner, contract nature, procedure, sending system, open state, national, EU and small-value flags, framework and DPS flags, estimated and awarded value, publication date and deadline, with the buyer, winners, values, lots and dates of each notice.
A query returns at most its first 5,000 notices, newest first by default; narrow a wide one with published_from/published_to or main_type. buyer takes the Finnish business id that hilma/buyers/search returns. Pass the id of a row, such as EF-57737 or OLD-160600, to hilma/tenders for the organisations, awards and the whole published notice.
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)count integer required — Max number of results (min: 1; max: 5000)keyword string nullable — Full-text keyword (examples: "siivous"; minLength: 1)main_type array nullable — Notice kinds to include (one of: "procurement_plan", "prior_information", "contract_notice", "national_notice", "contract_award", "modification"; minItems: 1)form_type array nullable — Hilma form type codes (examples: ["E4"], ["16","29"]; minItems: 1)cpv array nullable — CPV codes or code prefixes (examples: ["45200000"], ["452"]; minItems: 1)nuts array nullable — NUTS codes or prefixes of the place of performance (examples: ["FI1B"])buyer array nullable — Finnish business ids of buyers (examples: ["0201256-6"]; minItems: 1)supplier string nullable — Word in the winner name (examples: "Lassila"; minLength: 1)contract_nature array nullable — Contract natures to include (one of: "works", "services", "supplies"; minItems: 1)procedure_type array nullable — Procedure types to include (one of: "open", "restricted", "neg-wo-call", "neg-w-call", "comp-dial", "oth-single", "oth-mult", "innovation", "comp-tend"; minItems: 1)sending_system array nullable — Systems the notice was sent from (examples: ["Cloudia Kilpailutus"]; minItems: 1)is_open boolean nullable — Only notices not yet expired, or only expired onesis_national_procurement boolean nullable — National procurement flagis_eu_procurement boolean nullable — EU-threshold procurement flagis_national_small_value boolean nullable — National small-value procurement flaghas_framework_agreement boolean nullable — Framework agreement flaghas_dynamic_purchasing_system boolean nullable — Dynamic purchasing system flagis_eforms boolean nullable — eForms notice flagvalue_from integer nullable — Minimum estimated value in EUR (examples: 1000000; min: 0)value_to integer nullable — Maximum estimated value in EUR (examples: 10000; min: 0)awarded_value_from integer nullable — Minimum awarded total in EUR (examples: 1000000; min: 0)awarded_value_to integer nullable — Maximum awarded total in EUR (examples: 50000; min: 0)published_from string nullable — Earliest publication date, inclusive (examples: "2026-09-01")published_to string nullable — Latest publication date, inclusive (examples: "2026-09-21")deadline_from string nullable — Earliest tender deadline date, inclusive (examples: "2026-10-01")deadline_to string nullable — Latest tender deadline date, inclusive (examples: "2026-10-31")sort string nullable — Result order (one of: "newest", "oldest")@type string (default: "HilmaTenderSummary")id string requirednotice_id string nullablenotice_number string nullableprocedure_id string nullablelegacy_procedure_id string nullableplan_id string nullableeforms_id string nullableeforms_version_id string nullablecontract_folder_id string nullableparent_notice_id string nullableprevious_notice_ids array (default: [])previous_notice_numbers array (default: [])previous_ted_publication_ids array (default: [])previous_eforms_ids array (default: [])previous_eforms_version_ids array (default: [])previous_contract_folder_ids array (default: [])linked_ted_publication_ids array (default: [])ted_publication_id string nullableojs_number string nullablereferenced_notice_id string nullableform_type string nullablemain_type string nullablestage string nullabletitles object nullable@type string (default: "HilmaText")fi string nullablesv string nullableen string nullableother string nullabledescription string nullabledescriptions object nullable@type string (default: "HilmaText")fi string nullablesv string nullableen string nullableother string nullablebuyer object nullable@type string (default: "HilmaBuyer")name string nullablenames object nullable@type string (default: "HilmaText")fi string nullablesv string nullableen string nullableother string nullablebusiness_id string nullabledepartment string nullableaddress string nullablenuts string nullableorganisation_type string nullablesuppliers array (default: [])@type string (default: "HilmaSupplier")name string requiredidentifier string nullablecpv array (default: [])nuts array (default: [])contract_natures array (default: [])procedure_type string nullablevalue object nullable@type string (default: "HilmaValue")amount number nullablecurrency string nullableawarded_value object nullable@type string (default: "HilmaValue")amount number nullablecurrency string nullableframework_max_value object nullable@type string (default: "HilmaValue")amount number nullablecurrency string nullableframework_approximate_value object nullable@type string (default: "HilmaValue")amount number nullablecurrency string nullabledates object nullable@type string (default: "HilmaDates")published_at integer nullablemodified_at integer nullabledeadline_at integer nullableexpires_at integer nullableis_cancelled boolean nullableis_corrigendum boolean nullableis_eforms boolean nullableis_eu_procurement boolean nullableis_national_procurement boolean nullableis_national_small_value boolean nullableis_private_small_value boolean nullableis_plan boolean nullableis_latest boolean nullableis_tendering_in_hilma boolean nullablehas_framework_agreement boolean nullablehas_dynamic_purchasing_system boolean nullableestimated_opportunities string nullabledocuments_url string nullablesending_system string nullablesustainability object nullable@type string (default: "HilmaSustainability")has_biodiversity boolean nullablehas_circular_economy boolean nullablehas_code_of_conduct boolean nullablehas_employment_condition boolean nullablehas_end_user_involvement boolean nullablehas_energy_efficiency boolean nullablehas_innovation boolean nullablehas_just_working_conditions boolean nullablehas_listed_green_criteria boolean nullablehas_low_carbon boolean nullablehas_sme_participation boolean nullableis_solution_new_to_buyer boolean nullableis_solution_new_to_market boolean nullablehas_sustainable_food_production boolean nullablelots array (default: [])@type string (default: "HilmaLotSummary")id string nullabletitles object nullable@type string (default: "HilmaText")fi string nullablesv string nullableen string nullableother string nullabledescription string nullabledescriptions object nullable@type string (default: "HilmaText")fi string nullablesv string nullableen string nullableother string nullablecpv array (default: [])nuts array (default: [])contract_natures array (default: [])procedure_type string nullablevalue object nullable@type string (default: "HilmaValue")amount number nullablecurrency string nullableawarded_value object nullable@type string (default: "HilmaValue")amount number nullablecurrency string nullablesuppliers array (default: [])@type string (default: "HilmaSupplier")name string requiredidentifier string nullabledeadline_at integer nullableexpires_at integer nullablehas_framework_agreement boolean nullablehas_dynamic_purchasing_system boolean nullableestimated_opportunities string nullablestatistics object nullable@type string (default: "HilmaTenderStatistics")received_tender_count integer nullablereceived_application_count integer nullableelectronic_tender_count integer nullablemicro_tenderer_count integer nullablesmall_tenderer_count integer nullablemedium_tenderer_count integer nullablesme_tenderer_count integer nullableother_eea_tenderer_count integer nullableoutside_eea_tenderer_count integer nullableunverified_tender_count integer nullableinadmissible_tender_count integer nullableabnormally_low_tender_count integer nullablesustainability object nullable@type string (default: "HilmaSustainability")has_biodiversity boolean nullablehas_circular_economy boolean nullablehas_code_of_conduct boolean nullablehas_employment_condition boolean nullablehas_end_user_involvement boolean nullablehas_energy_efficiency boolean nullablehas_innovation boolean nullablehas_just_working_conditions boolean nullablehas_listed_green_criteria boolean nullablehas_low_carbon boolean nullablehas_sme_participation boolean nullableis_solution_new_to_buyer boolean nullableis_solution_new_to_market boolean nullablehas_sustainable_food_production boolean nullablecountry string (default: "FI")url string required422 — A filter value Hilma does not accept Check the fields against this schema. A URN with the wrong prefix is the most common cause.408 — The request ran past its time limit Raise `timeout` in the request body, up to the maximum this endpoint documents. Lowering `count` or turning off the `with_*` flags also helps, because less work finishes sooner.412 — The entity was not found, or a precondition failed Retrying will not help: either the entity does not exist, or the input points at a different one.429 — Too many requests: a rate limit or a usage window is exhausted When the response carries an X-Retry-After header, wait that many seconds and retry: the same number is in the body as `detail.retry_after`, and the limit clears once that window passes. The message in the body names the limit that was hit.500 — Something broke on our side Retrying will not help. If it keeps happening, send us the X-Request-ID from the response headers.529 — Rate limit reached, or the endpoint is overloaded Wait at least 30 seconds, then retry.X-Error — Error message text (present only on error)X-Request-ID — Unique request identifierX-Execution-Time — Execution time in secondsX-Result-Count — How many records the body carries. 0 means an empty result, which is a normal answer and not by itself an error. A non-zero count can come back together with X-Error when the failure happened partway through — read this header and X-Error independently.X-Total-Available-Results — How many records exist for this query, when the endpoint can say. On a `dry_run` request this is the answer and the body is empty. It saturates: the endpoint's documented maximum means 'at least that many', any smaller number is exact.X-Warning — Present when the request body carried keys this endpoint does not document. They were ignored, so any filter you meant to apply through them did not apply. Check the spelling against this schema and retry.X-Retry-After — Seconds to wait before retrying. Present only on 429.