POST /api/gebiz/tenders
Price: 20 credits
Get one Singapore government procurement opportunity from GeBIZ by its document number or opportunity URL, with its Respondents and Award tabs merged in. Returns the title, reference, agency, status, published and closing dates, procurement type, nature, method and category, GRA heads, WTO-GPA coverage, contract period, contact persons, site briefing, the items to respond with quantities and unit prices, and on closed opportunities every respondent's bid and the award: date, total value, awarded suppliers with their values and items, or the reason for no award.
Use this to read the full record behind an id from gebiz/tenders/search. `status` is the listing badge (open, closed, pending_award, awarded, cancelled, no_award); `respondents` and `award` are filled only once the opportunity has closed, each bid line carrying its `total_price` and `remarks`, and `suppliers` repeats the award's winners for convenience. A cancelled record carries `cancelled_date` and `cancellation_reason`. Tender documents and corrigendum texts need a GeBIZ login and are not returned.
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)tender string required — GeBIZ document number or opportunity URL (examples: "PUB000ETT26000037", "https://www.gebiz.gov.sg/ptn/opportunity/directlink.xhtml?docCode=MOE000ETT26000065"; minLength: 1)@type string (default: "GebizTender")id string requiredreference string nullablekind string nullabledescription string nullablestatus string nullablestage string requiredbuyer object nullable@type string (default: "GebizBuyer")name string requiredaddress string nullablepublished_at integer nullabledeadline_at integer nullablecancelled_date string nullablecancellation_reason string nullableoffer_validity_days integer nullableremarks string nullableprocurement_type string nullablebudget_type string nullableis_two_envelope boolean nullableis_wto_gpa_covered boolean nullableprocurement_nature string nullableperiod_contract_start_date string nullableperiod_contract_end_date string nullableprocurement_method string nullableallows_request_for_proposal boolean nullablesubmission_details string nullablesubmission_mode string nullablebox_number string nullablepayment_terms string nullablegra_heads array (default: [])category string nullablesite_briefing_at integer nullablesite_briefing object nullable@type string (default: "GebizSiteBriefing")is_attendance_compulsory boolean nullabledate string nullabletime string nullablevenue string nullableremarks string nullablecontact object nullable@type string (default: "GebizContact")role string nullablename string nullableemail string nullablephone string nullablefax string nullableaddress string nullablecontacts array (default: [])@type string (default: "GebizContact")role string nullablename string nullableemail string nullablephone string nullablefax string nullableaddress string nullableawarding_agency object nullable@type string (default: "GebizBuyer")name string requiredaddress string nullableawarding_agency_contact object nullable@type string (default: "GebizContact")role string nullablename string nullableemail string nullablephone string nullablefax string nullableaddress string nullableline_items array (default: [])@type string (default: "GebizItem")number string nullableschedule string nullableis_mandatory boolean nullableunit string nullablequantity number nullableunit_price number nullablecurrency string nullablepercentage_adjustment number nullableresponse_type string nullableremarks string nullablelines array (default: [])@type string (default: "GebizItemLine")number string nullabledescription string nullableunit string nullablequantity number nullableunit_price number nullabletotal_price number nullablecurrency string nullablelocation string nullabledelivery_date string nullabledelivery_terms string nullableremarks string nullablerespondents_count integer nullablerespondents array (default: [])@type string (default: "GebizRespondent")name string requiredis_consortium boolean nullablecompanies_count integer nullablebids array (default: [])@type string (default: "GebizItem")number string nullableschedule string nullableis_mandatory boolean nullableunit string nullablequantity number nullableunit_price number nullablecurrency string nullablepercentage_adjustment number nullableresponse_type string nullableremarks string nullablelines array (default: [])award object nullable@type string (default: "GebizAward")awarded_date string nullabletotal_awarded_value number nullablecurrency string nullablesuppliers_awarded_count integer nullableprocurement_method string nullableis_wto_gpa_covered boolean nullablereason_for_no_award string nullableawarding_agency object nullable@type string (default: "GebizBuyer")name string requiredaddress string nullablesuppliers array (default: [])@type string (default: "GebizSupplier")name string requiredaddress string nullableawarded_value number nullablecurrency string nullableis_consortium boolean nullablecompanies_count integer nullableawarded_items array (default: [])suppliers array (default: [])@type string (default: "GebizSupplier")name string requiredaddress string nullableawarded_value number nullablecurrency string nullableis_consortium boolean nullablecompanies_count integer nullableawarded_items array (default: [])@type string (default: "GebizItem")number string nullableschedule string nullableis_mandatory boolean nullableunit string nullablequantity number nullableunit_price number nullablecurrency string nullablepercentage_adjustment number nullableresponse_type string nullableremarks string nullablelines array (default: [])country string (default: "SG")url 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 — No GeBIZ opportunity exists with that document number, or it has been retired. 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.