> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usecroma.com/llms.txt
> Use this file to discover all available pages before exploring further.

# COMPRASAL

> Las compras públicas de El Salvador: cada adjudicación, el registro de proveedores con sus sanciones, los procesos abiertos a ofertas y cuáles encajan con lo que un proveedor ya vende.

COMPRASAL es el sistema de compras públicas de El Salvador, a cargo de la Dirección Nacional de Compras Públicas (DINAC) del Ministerio de Hacienda. Cada ministerio, municipio y entidad autónoma publica ahí sus compras: unas 150.000 adjudicaciones desde que el sistema actual empezó en diciembre de 2024, un registro de unos 8.600 proveedores, la lista de proveedores sancionados y los cerca de 500 procesos abiertos a ofertas en cada momento.

Croma lo guarda todo, así que tienen respuesta preguntas que COMPRASAL mismo no responde: cada adjudicación a un proveedor en todas las instituciones, cuánto ha vendido y a quién, si su nombre aparece en la lista de sancionados, y qué procesos abiertos se parecen a lo que ya ha vendido. Busca en el registro por nombre (tolerante a errores de escritura), lee el perfil de un proveedor, busca adjudicaciones y procesos abiertos, lee el informe de una adjudicación con sus oferentes y cifrados presupuestarios, y cruza un proveedor con las licitaciones a las que podría ofertar esta semana.

## Buscar proveedores

`POST /sv/comprasal-sv/suppliers-search/v1` [Dataset](https://docs.usecroma.com/es/datasets.md)

Encuentra el `id` de un proveedor por su nombre, como sea que se haya escrito.

| Campo | Tipo | Notas |
| - | - | - |
| `query` | string | Nombre o nombre comercial opcional, p. ej. `Textiles Varios`. Vacío para recorrer todo el registro. |
| `sanctioned_only` | boolean | Si es true, solo proveedores que COMPRASAL marca como sancionados. Por defecto `false`. |
| `page` | integer | Número de página, empieza en 1. Por defecto `1`. |
| `per_page` | integer | Resultados por página (1-100). Por defecto `20`. |

```bash theme={"dark"}
curl https://api.croma.run/sv/comprasal-sv/suppliers-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "Textiles Varios" }'
```

Devuelve `as_of` (qué tan actualizados están los datos), los filtros aplicados, `total` y `total_is_exact`, `page`, `per_page`, `total_pages`, `count` y `results[]`. Cada proveedor incluye `id`, `name` (la razón social, o el nombre de la persona si es persona natural), `trade_name`, `sanctioned` y `score` (de 0 a 100, qué tan cerca está el nombre de `query`; null sin búsqueda).

> [!NOTE]
>
> El registro de COMPRASAL no publica el NIT de los proveedores, así que se busca por nombre.

## Perfil de un proveedor

`POST /sv/comprasal-sv/supplier/v1` [Dataset](https://docs.usecroma.com/es/datasets.md)

Todo lo que las compras públicas saben de un proveedor, en una sola respuesta.

| Campo | Tipo | Notas |
| - | - | - |
| `supplier_id` | integer | **Obligatorio.** El `id` del proveedor que devuelve la búsqueda de proveedores, p. ej. `392`. |

```bash theme={"dark"}
curl https://api.croma.run/sv/comprasal-sv/supplier/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "supplier_id": 392 }'
```

Devuelve `as_of`, `found`, `supplier_id`, `supplier` (`id`, `name`, `trade_name`, `sanctioned`), `sanctions[]` (`name`, `start_date`, `end_date`, `sanctioning_entity`, `list`, `active`, `score`) y `awards`: `total`, `summarized` y `summary_is_complete` (los montos suman las 2.000 adjudicaciones más recientes), `amount`, `first_awarded_date`, `last_awarded_date`, `entities[]` (`entity_id`, `entity_name`, `awards`, `amount`) y `latest[]`, las diez adjudicaciones más recientes.

> [!NOTE]
>
> Un id que el registro no tiene devuelve `found: false` con HTTP 200, no un error. Las sanciones se cruzan por nombre, porque la lista no trae el id del proveedor: revisa `score` antes de dar una coincidencia por buena.

## Buscar adjudicaciones

`POST /sv/comprasal-sv/awards-search/v1` [Dataset](https://docs.usecroma.com/es/datasets.md)

Cada adjudicación, por proveedor, institución, proceso, fecha o palabras.

| Campo | Tipo | Notas |
| - | - | - |
| `query` | string | Palabras opcionales que se buscan en lo comprado, el código del proceso, el proveedor y la institución, p. ej. `uniformes`. |
| `supplier_id` | integer | `id` de proveedor opcional, de la búsqueda de proveedores: solo sus adjudicaciones. Por defecto `0`. |
| `entity_id` | integer | `entity_id` opcional de la institución contratante, como lo traen las adjudicaciones, p. ej. `438`. Por defecto `0`. |
| `process_code` | string | Código de proceso opcional, p. ej. `1000009-2026-P0003`. |
| `from_date` | string | Opcional: adjudicaciones de esta fecha en adelante, `yyyy-mm-dd`. |
| `to_date` | string | Opcional: adjudicaciones hasta esta fecha, `yyyy-mm-dd`. |
| `page` | integer | Número de página, empieza en 1. Por defecto `1`. |
| `per_page` | integer | Resultados por página (1-100). Por defecto `20`. |

```bash theme={"dark"}
curl https://api.croma.run/sv/comprasal-sv/awards-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "uniformes", "from_date": "2026-01-01" }'
```

Devuelve `as_of` (qué tan actualizados están los datos), los filtros aplicados, `total` y `total_is_exact`, `page`, `per_page`, `total_pages`, `count` y `results[]`. Cada adjudicación incluye `id`, `amount` (dólares), `awarded_date`, `process_id`, `process_code`, `process_name` (lo que se compró), `contracting_method` y `contracting_method_code`, `entity_id`, `entity_code`, `entity_name`, `supplier_id`, `supplier_name`, `supplier_trade_name` y `official_url` (la adjudicación en COMPRASAL).

## Informe de una adjudicación

`POST /sv/comprasal-sv/award/v1` [Lookup](https://docs.usecroma.com/es/datasets.md#lookups)

> [!NOTE]
>
> Responde desde la copia de Croma cuando tiene una respuesta reciente para la llave; si no, lee la fuente y guarda la respuesta. Cada respuesta dice cuándo se consultó la fuente por última vez (`checked_at`) y de dónde salió la respuesta (`served_from`).

| Campo | Tipo | Notas |
| - | - | - |
| `award_id` | integer | **Obligatorio.** El `id` de la adjudicación que devuelve la búsqueda, p. ej. `587047`. |

```bash theme={"dark"}
curl https://api.croma.run/sv/comprasal-sv/award/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "award_id": 587047 }'
```

Devuelve `found`, `award_id`, `checked_at`, `served_from` y `award`: `contract_name`, `contracting_method`, `term_days`, `planned_amount`, `certified_amount`, `published_at`, `opened_at`, `closed_at`, `process_status`, `signed_at`, `budget_codes[]`, `bidders[]` (`name`, `submitted_at`), `modifications`, `payments` y `official_url`.

> [!NOTE]
>
> Un id que COMPRASAL no tiene devuelve `found: false` con HTTP 200, no un error.

## Buscar procesos abiertos

`POST /sv/comprasal-sv/tenders-search/v1` [Dataset](https://docs.usecroma.com/es/datasets.md)

Los procesos que reciben ofertas ahora, el que cierra primero arriba.

| Campo | Tipo | Notas |
| - | - | - |
| `query` | string | Palabras opcionales que se buscan en lo que se compra, el código del proceso y la institución, p. ej. `uniformes`. |
| `activity_code` | string | Código de actividad económica opcional al que está abierto el proceso, p. ej. `46592`. |
| `open_only` | boolean | Si es true (por defecto), solo procesos que aún reciben ofertas. Por defecto `true`. |
| `page` | integer | Número de página, empieza en 1. Por defecto `1`. |
| `per_page` | integer | Resultados por página (1-100). Por defecto `20`. |

```bash theme={"dark"}
curl https://api.croma.run/sv/comprasal-sv/tenders-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "uniformes" }'
```

Devuelve `as_of` (qué tan actualizados están los datos), los filtros aplicados, `total` y `total_is_exact`, `page`, `per_page`, `total_pages`, `count` y `results[]`. Cada proceso incluye `id`, `code`, `name` (lo que se compra), `entity_name`, `contracting_method` y `contracting_method_code`, `status`, `stage`, `current_stages[]` y `stages[]` (`name`, `starts_at`, `ends_at`), `offers_due_at` (cuándo cierra la recepción de ofertas), `activities[]` (`code`, `name`: las actividades económicas a las que está abierto) y `activity_codes`.

## Licitaciones para un proveedor

`POST /sv/comprasal-sv/tenders-for-supplier/v1` [Dataset](https://docs.usecroma.com/es/datasets.md)

De lo que un proveedor ya vendió a lo que podría ofertar esta semana.

| Campo | Tipo | Notas |
| - | - | - |
| `supplier_id` | integer | **Obligatorio.** El `id` del proveedor que devuelve la búsqueda de proveedores, p. ej. `392`. |
| `limit` | integer | Cuántas licitaciones devolver (1-50). Por defecto `10`. |

```bash theme={"dark"}
curl https://api.croma.run/sv/comprasal-sv/tenders-for-supplier/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "supplier_id": 392 }'
```

Devuelve `as_of`, `found`, `supplier_id`, `supplier_name`, `awards_considered`, `count` y `results[]`, la mejor coincidencia primero. Cada proceso incluye `id`, `code`, `name` (lo que se compra), `entity_name`, `contracting_method` y `contracting_method_code`, `status`, `stage`, `current_stages[]` y `stages[]` (`name`, `starts_at`, `ends_at`), `offers_due_at` (cuándo cierra la recepción de ofertas), `activities[]` (`code`, `name`: las actividades económicas a las que está abierto) y `activity_codes`. Cada coincidencia agrega `score`, `matched_terms` y `similar_award_ids`.

> [!NOTE]
>
> Un proveedor sin adjudicaciones no tiene coincidencias: el cruce sale de lo que ha vendido.

> **[Referencia completa](https://docs.usecroma.com/es/api-reference/overview.md)**
>
> Esquemas, todos los campos de respuesta y un playground interactivo.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.