POST /api/twpcc/awards/search
Price: 20 credits
Search Taiwan government procurement award, non-award and revocation notices by award announcement date window, tendering method, category, amount tier, budget range, tender name, awarded item, case number, agency, winning or bidding supplier, place of performance, priority-procurement category, disaster reconstruction, policy campaigns and common supply contracts. Each row is the notice's id, case number, name, agency, method, category, announcement date and award amount.
The date window spans at most 366 days. `winner_id` and `bidder_id` take the 8-digit supplier code, so one call lists a supplier's wins. Pass a row's `id` to twpcc/awards for bidders, items and the committee.
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)start_date string required — First award announcement day of the window (format: date; examples: "2026-09-01")end_date string required — Last award announcement day of the window (format: date; examples: "2026-09-24")status string — Award outcome of the notice (default: "awarded"; one of: "awarded", "not_awarded", "revoked")tender_method string nullable — Tendering method (one of: "open", "open_electronic_quotation", "open_quotation_or_proposal", "restricted_after_open_evaluation", "selective_qualified_list", "selective_qualified_list_invitation", "selective_single_case", "electronic_auction", "restricted")category string nullable — Procurement category (one of: "works", "goods", "services")amount_tier string nullable — Procurement amount tier (one of: "below_publication_threshold", "publication_to_supervision_threshold", "supervision_to_huge_threshold", "huge")keyword string nullable — Words in the tender name (examples: "資材"; minLength: 1)case_number string nullable — Tender case number (examples: "D115104"; minLength: 1)org_id string nullable — Procuring agency code (examples: "A.13.1"; minLength: 1)org_name string nullable — Procuring agency name (examples: "經濟部商業發展署"; minLength: 1)winner_id string nullable — Winning supplier code (examples: "02750963"; minLength: 1)winner_name string nullable — Winning supplier name (examples: "財團法人工業技術研究院"; minLength: 1)bidder_id string nullable — Bidding supplier code (examples: "04170821"; minLength: 1)bidder_name string nullable — Bidding supplier name (examples: "台北市電腦商業同業公會"; minLength: 1)min_budget integer nullable — Lowest budget in TWD (examples: 1000000; min: 0)max_budget integer nullable — Highest budget in TWD (examples: 5000000; min: 0)item string nullable — Words in an awarded item name (examples: "電腦"; minLength: 1)performance_location string nullable — Place of performance (one of: "keelung", "taipei", "new_taipei", "new_taipei_wulai", "taoyuan", "taoyuan_fuxing", "hsinchu_city", "hsinchu_county", "hsinchu_county_guanxi", "hsinchu_county_wufeng", "hsinchu_county_jianshi", "miaoli", "miaoli_nanzhuang", "miaoli_taian", "miaoli_shitan", "taichung", "taichung_heping", "nantou", "nantou_xinyi", "nantou_renai", "nantou_yuchi", "changhua", "yunlin", "chiayi_city", "chiayi_county", "chiayi_county_alishan", "tainan", "kaohsiung", "kaohsiung_namasia", "kaohsiung_maolin", "kaohsiung_taoyuan", "pingtung", "pingtung_sandimen", "pingtung_mudan", "pingtung_laiyi", "pingtung_chunri", "pingtung_taiwu", "pingtung_shizi", "pingtung_manzhou", "pingtung_majia", "pingtung_wutai", "yilan", "yilan_datong", "yilan_nanao", "hualien", "taitung_ludao", "taitung_dawu", "taitung_taimali", "taitung_taitung_city", "taitung_chenggong", "taitung_chishang", "taitung_beinan", "taitung_yanping", "taitung_donghe", "taitung_jinfeng", "taitung_changbin", "taitung_haiduan", "taitung_luye", "taitung_daren", "taitung_guanshan", "taitung_lanyu", "kinmen", "penghu", "lienchiang", "other", "pingtung_manzhou_former_code", "former_taipei_county", "former_taipei_county_wulai", "former_taichung_county", "former_taichung_county_heping", "former_tainan_county", "former_kaohsiung_county", "former_kaohsiung_county_maolin", "former_kaohsiung_county_taoyuan", "former_kaohsiung_county_namasia", "former_taoyuan_county", "former_taoyuan_county_fuxing")priority_category string nullable — Category of priority procurement from disability welfare institutions (one of: "food", "handicrafts", "cleaning_products", "horticultural_products", "assistive_devices", "household_products", "printing", "cleaning_services", "catering_services", "car_wash_services", "laundry_services", "customer_services", "contract_manufacturing", "performing_arts_services", "transport_services", "other")disaster_reconstruction boolean nullable — Disaster-area reconstruction works only, or none of thempolicy_advocacy boolean nullable — Policy and public-information campaigns only, or none of themcommon_supply_contract boolean nullable — Purchases under a common supply contract only, or none of themcount integer required — Max number of notices to return (min: 1; max: 5000)@type string (default: "TwpccAwardListing")id string requiredis_awarded boolean requiredcase_number string nullableis_correction boolean (default: false)org_name string nullabletender_method string nullablecategory string nullableannounced_date string nullableawarded_amount number nullablecurrency string nullablenotice_number string nullableurl string required422 — The request body did not validate 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.