POST /api/boamp/tenders/search
Price: 20 credits
Search BOAMP notices — calls for tenders, awards, corrections, cancellations, prior information and contract modifications from every French contracting authority since 2015, national MAPA and below-threshold notices included — by keyword, nature, family, contract type, procedure, state, legal framework, department, BOAMP descriptor, buyer, winner, publication date and response deadline, with the buyer, winners, departments, descriptors, dates and linked notices of each notice.
A query returns at most its first 10,000 notices, newest first by default, so narrow a wide search with published_from/published_to or nature to reach older ones. family adapted_procedure and national_formalised hold the national below-threshold notices. Pass the id of a row to boamp/tenders for the whole notice with description, CPV codes, values, lots and awards.
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: 10000)keyword string nullable — Full-text keyword (examples: "nettoyage"; minLength: 1)nature array nullable — Notice natures to include (one of: "call_for_tenders", "award", "correction", "intention_to_conclude", "prior_information", "modification", "cancellation", "voluntary_ex_ante", "periodic", "qualification", "other"; minItems: 1)family array nullable — Notice families to include (one of: "european", "national_formalised", "adapted_procedure", "public_service_delegation", "other"; minItems: 1)contract_type array nullable — Contract types to include (one of: "works", "services", "supplies"; minItems: 1)procedure array nullable — Procedure types to include (one of: "open", "adapted", "negotiated", "restricted", "awarded_without_publication", "competitive_dialogue", "public_service_delegation", "restricted_design_contest", "open_design_contest", "innovation_partnership", "other"; minItems: 1)state array nullable — Notice states to include (one of: "initial", "correction", "cancellation", "modification"; minItems: 1)perimeter array nullable — Legal frameworks to include (one of: "directive_2014_24", "directive_2014_25", "directive_2014_23", "directive_2009_81", "directive_2004_18", "directive_2004_17", "code_2006", "code_2006_defence", "national_formalised", "adapted_procedure", "public_service_delegation", "other"; minItems: 1)department array nullable — French department codes (examples: ["75"], ["13","2A"]; minItems: 1)descriptor array nullable — BOAMP descriptor codes (examples: ["89"]; minItems: 1)buyer string nullable — Words in the buyer name (examples: "Ville de Paris"; minLength: 1)supplier string nullable — Words in the winner name (examples: "EIFFAGE"; minLength: 1)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 response deadline date, inclusive (examples: "2026-10-01")deadline_to string nullable — Latest response deadline date, inclusive (examples: "2026-10-31")sort string nullable — Result order (one of: "newest", "oldest")@type string (default: "BoampTenderSummary")id string requiredcontract_folder_id string nullablefamily string nullablefamily_label string nullablestage string nullablenature string nullablenature_label string nullablesub_nature string nullablesub_nature_label string nullablenature_category string nullablenature_category_label string nullablestate string nullableperimeter string nullableprocedure_type string nullableprocedure_subtype string nullableprocedure_label string nullableprocedure_category string nullablebuyer object nullable@type string (default: "BoampOrganisation")id string nullablename string nullablenational_id string nullabledepartment string nullablestreet string nullablecity string nullablepostcode string nullablenuts string nullablecountry string nullablecontact_name string nullableemail string nullablephone string nullablefax string nullablewebsite_url string nullablebuyer_profile_url string nullablesize string nullablesuppliers array (default: [])@type string (default: "BoampOrganisation")id string nullablename string nullablenational_id string nullabledepartment string nullablestreet string nullablecity string nullablepostcode string nullablenuts string nullablecountry string nullablecontact_name string nullableemail string nullablephone string nullablefax string nullablewebsite_url string nullablebuyer_profile_url string nullablesize string nullablecontract_types array (default: [])contract_type_labels array (default: [])departments array (default: [])performance_department string nullabledescriptors array (default: [])@type string (default: "BoampDescriptor")code string nullablelabel string nullablecriteria array (default: [])notice_type_codes array (default: [])simplified_procedure string nullablesimplified_procedure_label string nullablerelated_notice_ids array (default: [])previous_notices array (default: [])@type string (default: "BoampPreviousNotice")id string nullablefamily string nullableperimeter string nullablenature string nullablesub_nature string nullablestatus string nullablesent_date string nullablepublished_date string nullableojeu_notice_number string nullableojeu_issue_number string nullableojeu_year string nullableojeu_published_date string nullablepublished_date string nullabledisplay_end_date string nullabledeadline_at integer nullableschema_version string nullablecountry string (default: "FR")url string required422 — A filter value BOAMP 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.