Catalog / Tenders & public contracts
TENDERS & PUBLIC CONTRACTS · COLOMBIA
SECOP II Colombia Tenders | Government Bids
Find Colombian government tenders on SECOP II by keyword, buyer, department, city, method or UNSPSC code.
About this data
Find Colombian government tenders on SECOP II by keyword, buyer, department, city, method or UNSPSC code. One row per open tender with buyer and NIT, estimated value in COP, deadlines, days left, documents and the official notice link. Export JSON, CSV or Excel; build daily tender alerts.
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/co/secop/tenders
Colombian public tenders from SECOP II, open ones by default: buyer, department, city, method, estimated value and deadlines.
Input
Send a JSON body to POST https://api.ssh.autos/v1/co/secop/tenders.
| Field | Type | Required | Notes |
|---|---|---|---|
keywords | array of strings | optional | up to 5 items |
buyer | string | optional | up to 150 characters |
status | string | optional | one of open, closed, awarded, cancelled, all; default "open" |
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 33 fields; a field the source does not publish comes back null.
33 fields per record
| Field | Type | Notes |
|---|---|---|
tenderId | string | SECOP II process id, e.g. CO1.REQ.11222421. One row per tender. |
reference | string | Buyer's own process reference, e.g. SDM-PSA-SIE-98-2026. |
noticeId | string | Notice id of the official notice page, e.g. CO1.NTC.11131967. |
portfolioId | string | Process portfolio id, e.g. CO1.BDOS.11031876. |
buyer | object | Buying public entity. |
country | string | Always CO. |
region | string | Department (region) of the buying entity, e.g. Antioquia. |
city | string | City of the buying entity. |
procurementMethod | string | Procurement method (modalidad) as published, e.g. Licitación pública. |
contractType | string | Contract type, e.g. Obra, Suministros, Prestación de servicios. |
status | string | open (offers still accepted, deadline today or later), closed, awarded or cancelled. one of open, closed, awarded, cancelled |
sourceStatus | string | Process state as published, e.g. Publicado, Evaluación, Seleccionado. |
phase | string | Process phase as published, e.g. Presentación de oferta. |
categoryScheme | string | UNSPSC when category codes are published. |
categoryCodes | array of strings | 8-digit UNSPSC codes, main code first; empty when the buyer gave none. |
estimatedValue | number | Estimated (base) price in pesos when published; null when not published. |
awardedValue | number | Total awarded value in pesos for awarded tenders. |
currency | string | COP when a value is present. |
publishedDate | string | Publication date, YYYY-MM-DD (Bogotá). |
lastPublishedDate | string | Date of the latest publication or change, YYYY-MM-DD (Bogotá). |
deadlineDate | string | Deadline for offers, YYYY-MM-DD (Bogotá). |
daysUntilDeadline | integer | Days from today (Bogotá) to the deadline for open tenders; 0 means it closes today. |
offersOpeningDate | string | Offer opening date, YYYY-MM-DD (Bogotá). |
datesTimezone | string | Always America/Bogota (UTC-5): all dates are Bogotá calendar dates. |
duration | integer | Planned contract duration. |
durationUnit | string | days, weeks, months or years. |
lots | integer | Number of lots, when the tender is split in lots. |
url | string | Official notice page on SECOP II. |
descriptionExcerpt | string | Tender description (up to 600 characters) including public contact information; only with includeDetails. |
documents | array of objects | Tender documents (pliegos, studies, annexes) with download links; only with includeDetails, otherwise null. |
detailsError | string | Why documents are missing on this row, if they could not be read. |
source | string | SECOP II (Colombia Compra Eficiente). |
scrapedAt | string | When the row was saved (ISO 8601, UTC). |
Example call
npx agentcash@latest fetch https://api.ssh.autos/v1/co/secop/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: SECOP II Colombia Tenders Scraper | Government Bids. 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