---
title: "SECOP Processes Search"
method: POST
path: "/co/secop/processes-search/v1"
tags: ["Colombia", "SECOP"]
---

# SECOP Processes Search

`POST /co/secop/processes-search/v1`

## Request

- Base URL: `https://api.croma.run`
- URL: `https://api.croma.run/co/secop/processes-search/v1`
- Auth: HTTP bearer

Search every Colombian public procurement process from SECOP II (2015 onward) and SECOP I (2004 onward) in one place. Full-text over what is being bought, plus filters on the buying entity's NIT, department, modality, contract type, status, UNSPSC category, year, publication-date range, estimated value and whether the process was awarded. Answers in milliseconds and covers both systems at once; use `secop-process` when you have a noticeUID and want one process with its awards and contracts.

**Dataset endpoint**: answers from the whole source in milliseconds and carries `as_of`.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `query` string: Optional search terms matched against the free text of the record (what is being bought, the entity and the supplier). Leave empty to filter without searching.
  - `platform` 'any' | 'secop_i' | 'secop_ii': Restrict to one system: `secop_ii` (the transactional platform, 2015 onward), `secop_i` (the publication register, 2004 onward), or `any` for both.
  - `entity_nit` string: Optional document filter: a NIT or a cédula, with or without dots and verification digit (`900195855`, `900.195.855-1` and `900195855-1` all match the same records).
  - `department` string: Optional department of the contracting entity, as SECOP writes it (`Antioquia`, `Bogotá D.C.`, ...). Empty for the whole country.
  - `modality` string: Optional modalidad de contratación, exactly as SECOP writes it (`Contratación directa`, `Licitación pública`, `Mínima cuantía`, ...). Empty for every modality.
  - `contract_type` string: Optional tipo de contrato, exactly as SECOP writes it (`Prestación de servicios`, `Obra`, `Suministros`, ...). Empty for every type.
  - `status` string: Optional estado, exactly as SECOP writes it (`Adjudicado`, `Celebrado`, `En ejecución`, `Terminado`, ...). Empty for every status.
  - `unspsc_code` string: Optional main UNSPSC category code of the purchase (`V1.80101500`). Empty for every category.
  - `year` integer: Optional calendar year. 0 searches every year.
  - `from_date` string, date: Optional date filter in yyyy-mm-dd format.
  - `to_date` string, date: Optional date filter in yyyy-mm-dd format.
  - `min_value` number: Optional lower bound on the amount, in COP. 0 means no lower bound.
  - `max_value` number: Optional upper bound on the amount, in COP. 0 means no upper bound.
  - `sort` 'recent' | 'oldest' | 'value_desc' | 'value_asc': Order of the results: `recent` (newest first, the default), `oldest`, `value_desc` (largest amount first) or `value_asc`.
  - `page` integer: 1-based page number for paginated results.
  - `per_page` integer: Results per page (1-100).
  - `awarded` 'any' | 'yes' | 'no': Restrict to processes that reached an award (`yes`), that did not (`no`), or `any`. Processes whose outcome the source does not state are excluded by `yes` and `no` alike.

## Response `200`

Successful response

- SecopProcessesSearchResponse
  - `data` SecopProcessesSearchData, required
    - `as_of` string, nullable, required: How current the data is: the moment this dataset was last brought up to date, as an ISO timestamp. Null before the first sync.
    - `total` number, required: Records matching the filters, regardless of the page size, counted up to 1000.
    - `total_is_exact` boolean, required: False when more than 1000 match: `total` is then 1000, and the pages go on.
    - `page` number, required
    - `per_page` number, required
    - `total_pages` number, required: Pages over `total`; there are more when `total_is_exact` is false.
    - `count` number, required: Records returned on this page.
    - `query` string, required
    - `platform` string, nullable, required
    - `entity_nit` string, nullable, required
    - `department` string, nullable, required
    - `modality` string, nullable, required
    - `contract_type` string, nullable, required
    - `status` string, nullable, required
    - `unspsc_code` string, nullable, required
    - `year` number, nullable, required
    - `from_date` string, nullable, required
    - `to_date` string, nullable, required
    - `min_value` number, nullable, required
    - `max_value` number, nullable, required
    - `sort` string, required
    - `awarded` string, required
    - `results` object[], required
      - `id` string, required: Stable identifier, `<platform>:<process id>` (e.g. `secop_ii:CO1.REQ.1234567`, `secop_i:20-11-10442331`).
      - `platform` 'secop_i' | 'secop_ii', required: Which system published the row: `secop_ii` (the transactional platform, 2015 onward) or `secop_i` (the publication register, 2004 onward).
      - `process_id` string, nullable, required: The process id as its own platform numbers it, without the platform prefix.
      - `reference` string, nullable, required: The entity's own reference for the process (número del proceso).
      - `notice_uid` string, nullable, required: SECOP II noticeUID (`CO1.NTC.*`), the id the public portal addresses a process by. Null on SECOP I.
      - `portfolio_id` string, nullable, required: SECOP II portfolio id (`CO1.BDOS.*`), the join key to the awarded contracts. Null on SECOP I.
      - `entity` string, nullable, required: Name of the contracting entity.
      - `entity_nit` string, nullable, required: NIT of the contracting entity, digits only, no verification digit.
      - `entity_code` string, nullable, required: The entity's internal SECOP code.
      - `entity_level` string, nullable, required: Nivel: `NACIONAL` or `TERRITORIAL`. Published by SECOP I; null on most SECOP II rows.
      - `entity_order` string, nullable, required: Orden: `NACIONAL CENTRALIZADO`, `TERRITORIAL DEPARTAMENTAL`, and so on.
      - `entity_department` string, nullable, required: Department the entity sits in.
      - `entity_city` string, nullable, required: Municipality the entity sits in.
      - `procurement_unit` string, nullable, required: Unidad de contratación that ran the process (SECOP II).
      - `procurement_unit_city` string, nullable, required: City of the unidad de contratación (SECOP II).
      - `sub_unit` string, nullable, required: Sub unidad ejecutora, when the entity splits its budget (SECOP I).
      - `name` string, nullable, required: Nombre del procedimiento: the short title of the process.
      - `description` string, nullable, required: What the entity says it is buying (descripción del procedimiento / detalle del objeto a contratar).
      - `object_type` string, nullable, required: Objeto a contratar, SECOP I's own classification of the purchase.
      - `unspsc_code` string, nullable, required: Main UNSPSC category code of the purchase.
      - `unspsc_additional` string, nullable, required: Further UNSPSC categories, as the platform prints them.
      - `unspsc_segment` string, nullable, required: UNSPSC segment name (SECOP I `nombre grupo`).
      - `unspsc_family` string, nullable, required: UNSPSC family name (SECOP I).
      - `unspsc_class` string, nullable, required: UNSPSC class name (SECOP I).
      - `modality` string, nullable, required: Modalidad de contratación: licitación pública, contratación directa, mínima cuantía, and so on.
      - `modality_justification` string, nullable, required: The legal ground the entity gave for the modality.
      - `modality_cause` string, nullable, required: Causal for the other forms of direct contracting (SECOP I).
      - `regime` string, nullable, required: Régimen de contratación the process runs under (SECOP I).
      - `contract_type` string, nullable, required: Tipo de contrato the process would produce (obra, prestación de servicios, suministro, ...).
      - `contract_subtype` string, nullable, required: Subtipo de contrato (SECOP II).
      - `base_price` number, nullable, required: Estimated value of the process in COP (precio base / cuantía del proceso).
      - `awarded_value` number, nullable, required: Total adjudicated in COP, summed across every award of the process. A framework agreement awards many providers, so this is not one provider's slice.
      - `currency` string, nullable, required: Currency the amounts are stated in. COP unless the process says otherwise.
      - `phase` string, nullable, required: Fase of the procedure (SECOP II): planeación, selección, and so on.
      - `status` string, nullable, required: Estado del procedimiento in the platform's own words (`Adjudicado`, `Celebrado`, `Convocado`, `Descartado`, ...).
      - `status_summary` string, nullable, required: Estado resumen, the platform's rolled-up status (SECOP II).
      - `opening_status` string, nullable, required: Estado de apertura del proceso (SECOP II).
      - `awarded` boolean, nullable, required: Whether the process reached an award. On SECOP II this lags reality; the contracts dataset is authoritative for who actually won.
      - `award_count` number, nullable, required: How many awards the process made. 0 when unawarded.
      - `published_date` string, nullable, required: When the process was first published, `yyyy-mm-dd`.
      - `last_published_date` string, nullable, required: When the process was last republished, `yyyy-mm-dd`. This is the freshest change signal the source offers.
      - `bid_deadline` string, nullable, required: Deadline for providers to submit offers, `yyyy-mm-dd`.
      - `award_date` string, nullable, required: When the process was awarded, `yyyy-mm-dd`.
      - `year` number, nullable, required: Calendar year of `published_date`, for cheap year filters and grouping.
      - `invited_providers` number, nullable, required: Providers invited to the process.
      - `directly_invited_providers` number, nullable, required: Providers invited directly.
      - `interested_providers` number, nullable, required: Providers that declared interest.
      - `responses` number, nullable, required: Responses received to the procedure.
      - `external_responses` number, nullable, required: Responses submitted outside the platform.
      - `offer_responses` number, nullable, required: Responses to offers counted on the procedure.
      - `unique_responding_providers` number, nullable, required: Distinct providers that responded. With `invited_providers`, the plainest measure of how contested a process was.
      - `lots` number, nullable, required: Number of lots the process was split into.
      - `views` number, nullable, required: Times the procedure was viewed on the platform.
      - `provider` string, nullable, required: Name of the awarded provider, when the process row names one.
      - `provider_document` string, nullable, required: Document of the awarded provider (NIT for a company, cédula for a natural person).
      - `provider_department` string, nullable, required: Department of the awarded provider.
      - `provider_city` string, nullable, required: Municipality of the awarded provider.
      - `execution_locations` string, nullable, required: Municipalities the contract is to be executed in (SECOP I).
      - `duration` string, nullable, required: Stated duration of the resulting contract.
      - `duration_unit` string, nullable, required: Unit `duration` is counted in (días, meses, ...).
      - `url` string, nullable, required: Public page for the process on its own platform.

## Other responses

- `400`: Invalid request body
- `401`: Missing or invalid API key
- `429`: Rate limit exceeded
- `500`: Internal error

---

[API](https://skmtc.dev/usecroma/apis/croma-marketplace-api.md) · [All operations](https://skmtc.dev/usecroma/apis/croma-marketplace-api/llms.txt) · [OpenAPI document](https://skmtc.dev/usecroma/apis/croma-marketplace-api/revisions/df016cdb29d7?raw)
