Catalog / Tenders & public contracts
TENDERS & PUBLIC CONTRACTS
UNGM UN Tenders | UN Procurement Notices
Search UNGM, the UN Global Marketplace, for procurement notices by keyword, agency, country or notice type.
About this data
Search UNGM, the UN Global Marketplace, for procurement notices by keyword, agency, country or notice type. Each row has agency, reference, beneficiary country, publication date, deadline in its own GMT offset and links. Add description, contacts and UNSPSC codes. Export JSON, CSV or Excel.
From the actor’s Apify Store listing. The per-call endpoint may return a bounded subset; its own description is below.
Buy per call over x402
One endpoint at api.ssh.autos. Each call is one JSON POST, paid in USDC with no account or API key, and answered in the same HTTP response.
POST /v1/ungm/tenders
UN procurement notices from UNGM: title, agency, reference, beneficiary country, notice type, publish date and deadline.
Input
Send a JSON body to POST https://api.ssh.autos/v1/ungm/tenders.
| Field | Type | Required | Notes |
|---|---|---|---|
keywords | string | optional | up to 200 characters |
maxItems | integer | optional | 1–10; default 5 |
Returned fields
The answer is JSON: records, a list of up to 10, and summary, the run status and counts. Each record has these 23 fields; a field the source does not publish comes back null.
23 fields per record
| Field | Type | Notes |
|---|---|---|
noticeId | string | UNGM notice id, for example 319219. One row per notice. |
url | string | Official notice page on ungm.org. |
reference | string | The buyer's reference number, for example UNDP-SLE-00337. |
agency | string | UN organization that published the notice, for example UNDP, UNICEF or WFP. |
noticeType | string | Notice type as published, for example Invitation to bid, Request for quotation or Call for individual consultants. |
country | string | Beneficiary country or countries exactly as published; some notices say 'Multiple destinations' or list several countries in one line. |
status | string | active when the run kept UNGM's 'only currently active' filter on (the source returned it as open); null when closed notices were included. one of active |
publishedOn | string | Publication date, YYYY-MM-DD. |
deadlineAt | string | Bid deadline as ISO 8601 with the notice's own GMT offset, for example 2026-11-04T15:59:00-04:00. |
deadlineText | string | Deadline exactly as published, for example '04-Nov-2026 15:59 (GMT -4.00)'. |
deadlineDate | string | Deadline calendar date, YYYY-MM-DD. |
deadlineTime | string | Deadline clock time as published, HH:MM in the notice's own GMT offset. |
deadlineOffset | string | The GMT offset UNGM publishes with the deadline, for example -04:00 or +04:30. |
registrationLevel | string | Registration level the notice asks for, when published; null otherwise. |
contacts | array of objects | Contact rows exactly as published (label and value); null unless includeDetails. |
links | array of objects | Published Links tab: external pages, e-procurement and supplier-registration links. null unless includeDetails. |
unspscCodes | array of strings | UNSPSC codes UNGM selected for this notice; null unless includeDetails. |
unspscNames | array of strings | The names of the selected UNSPSC codes, in the same order; null unless includeDetails. |
detailsFetched | boolean | true when the notice page was read for this row. |
detailsError | string | Why the notice page could not be read, when it could not; null when the details are complete or were not requested. |
sourceQuery | string | The filters this run used, for traceability. |
source | string | ungm.org |
scrapedAt | string | When this row was read, ISO 8601 with UTC offset. |
Example call
npx agentcash@latest fetch https://api.ssh.autos/v1/ungm/tenders -m POST -b '{"maxItems": 3}'
The example values come from the API spec or the actor’s own sample input. Running it is a paid call.
What is and isn’t charged
You pay the call price for
- An answer, including a definitive “not found” or an empty result.
- Confirmed no matches returns records: [] (charged: it is an answer).
Free
- Invalid input (422), busy (503), source failure (502), timeout (504) and calls whose client hung up are never charged.
- Invalid input and source failures are not charged.
Prefer a subscription? Run it on Apify
This data source is a public actor on the Apify Store: UNGM UN Tenders Scraper | UN Procurement Notices. Run it with your Apify account and plan for larger, scheduled or exported runs; it may offer more input options than the per-call endpoint.
How x402 payment works
- Your client sends the request. The API answers
402 Payment Requiredwith the price and where to pay. - The client pays from its own wallet: USDC on Base or Solana over x402, or over MPP on Tempo. No account, sign-up or API key.
- The client retries with the payment attached and gets the JSON answer in the same call. You are only charged for answers.
The AgentCash CLI in the example does all three steps for you and pays from your AgentCash wallet. Any x402 or MPP client works the same way.
Machine-readable: openapi.json · llms.txt