> ## 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.

# INVIMA

> Search every sanitary registration INVIMA has issued or let expire, in every product group, and every registered medicine presentation with its CUM code, ATC and active ingredients.

The Instituto Nacional de Vigilancia de Medicamentos y Alimentos (INVIMA) is Colombia's food and drug authority. Nothing it regulates can be sold in the country without its sanitary registration (registro sanitario) or, for low-risk cosmetics and cleaning products, its mandatory notification (NSO): medicines, food and drinks, cosmetics, medical devices, diagnostic reagents, supplements, biologicals, homeopathic and phytotherapeutic products, dental products and pesticides.

This is the whole register, about 385,000 registrations in force or expired, each with its number, dates, holder, every product name it covers and every company or person in a role on it. For medicines it goes one level deeper: every commercial presentation, about 163,000, with its CUM code (Código Único de Medicamento), ATC code, pharmaceutical form, active ingredients and concentration, route, pack and whether the presentation is active.

Search registrations by product, number, holder, group, status or expiry; search medicines by active ingredient, ATC code, name or holder; then read one registration by its file number or one presentation by its CUM.

<Note>
  The whole source, organized and ready to query: every endpoint on this page answers in milliseconds. Every response carries `as_of`: how current the data is. [How datasets work](/datasets).
</Note>

## Search the registrations

`POST /co/invima/registrations-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

One search over every registration and notification, in every product group, by product, number, holder, group, status or expiry.

| Field | Type | Notes |
| - | - | - |
| `query` | string | Optional words matched against the product names, the holder and every company or person in a role. |
| `registration_number` | string | Optional registration or notification number in any spelling, e.g. `INVIMA 2020M-0019848`, `2020M-0019848` or `NSO-PC-C 32.233 -VE`. Spaces, hyphens, dots and case are ignored. |
| `holder` | string | Optional holder (titular), matched from the start. Case and accents are ignored. |
| `product_group` | string | Optional product group as INVIMA names it: `MEDICAMENTOS`, `ALIMENTOS`, `COSMETICOS`, `MEDICO QUIRURGICOS`, `REACTIVO DIAGNOSTICO`, `REACTIVOS IN VITRO`, `BEBIDAS ALCOHOLICAS`, `ASEO Y LIMPIEZA`, `SUPLEMENTO DIETARIO`, `BIOLOGICOS`, `HOMEOPATICOS`, `FITOTERAPEUTICO`, `ODONTOLOGICOS` or `PLAGUICIDAS`. |
| `status` | string | Optional status: `vigente` (in force) or `vencido` (expired). |
| `expires_from` | string | Optional: only registrations that expire on or after this date, `yyyy-mm-dd`. |
| `expires_to` | string | Optional: only registrations that expire on or before this date, `yyyy-mm-dd`. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-100). Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/invima/registrations-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "query": "acetaminofen",
        "product_group": "MEDICAMENTOS",
        "status": "vigente"
      }'
```

Returns `as_of` (how current the data is), the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`, latest expiry first. Every registration carries `id` (the INVIMA file number, or expediente), `registration_number` (as INVIMA prints it, e.g. `INVIMA 2020M-0019848`), `product` and `products` (every product name it covers), `product_group` (e.g. `MEDICAMENTOS`, `ALIMENTOS`, `COSMETICOS`, `MEDICO QUIRURGICOS`), `directorate`, `status` (`Vigente` or `Vencido`), `issued_at`, `expires_at`, `holder`, `modality` (e.g. `FABRICAR Y VENDER`), `risk_level` (devices and reagents), `uses`, `shelf_life`, `parties[]` (`role` and `name`: manufacturers, importers, packagers, attorneys, legal representatives, pharmacists) and `entries`.

## One registration

`POST /co/invima/registration/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `file_number` | string | **Required.** The INVIMA file number (expediente), the `id` of a search result, e.g. `20190868`. |

```bash theme={"dark"}
curl https://api.croma.run/co/invima/registration/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "file_number": "20190868" }'
```

Returns `as_of`, `found`, `file_number` and `registration`. Every registration carries `id` (the INVIMA file number, or expediente), `registration_number` (as INVIMA prints it, e.g. `INVIMA 2020M-0019848`), `product` and `products` (every product name it covers), `product_group` (e.g. `MEDICAMENTOS`, `ALIMENTOS`, `COSMETICOS`, `MEDICO QUIRURGICOS`), `directorate`, `status` (`Vigente` or `Vencido`), `issued_at`, `expires_at`, `holder`, `modality` (e.g. `FABRICAR Y VENDER`), `risk_level` (devices and reagents), `uses`, `shelf_life`, `parties[]` (`role` and `name`: manufacturers, importers, packagers, attorneys, legal representatives, pharmacists) and `entries`.

<Note>
  A number INVIMA lists nothing under returns `found: false` with HTTP 200, not an error.
</Note>

## Search the medicines

`POST /co/invima/medicines-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

One search over every registered medicine presentation, by active ingredient, ATC code, name, number, holder or status.

| Field | Type | Notes |
| - | - | - |
| `query` | string | Optional words matched against the medicine's name, its active ingredients, the holder and the ATC description. |
| `registration_number` | string | Optional registration number in any spelling, e.g. `INVIMA 2023M-0013598-R2`. Spaces, hyphens and case are ignored. |
| `file_number` | string | Optional INVIMA file number (expediente), e.g. `20042480`: every presentation of that one registration. |
| `active_ingredient` | string | Optional active ingredient as INVIMA names it, e.g. `ACETAMINOFEN` or `AMOXICILINA TRIHIDRATO`. Exact match; case and accents are ignored. |
| `atc_code` | string | Optional ATC code or prefix, e.g. `N02BE01` for a substance or `N02` for a whole group. |
| `holder` | string | Optional holder (titular), matched from the start. Case and accents are ignored. |
| `status` | string | Optional status of the registration as INVIMA states it: `vigente`, `vencido`, `perdida fuerza ejec`, `cancelado`, `negado`, `suspendido`, `en tramite renov`, among others. Case and accents are ignored. |
| `cum_status` | enum | Optional state of the presentation: `activo` or `inactivo`. |
| `expires_from` | string | Optional: only registrations that expire on or after this date, `yyyy-mm-dd`. |
| `expires_to` | string | Optional: only registrations that expire on or before this date, `yyyy-mm-dd`. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-100). Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/invima/medicines-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "active_ingredient": "ACETAMINOFEN",
        "status": "vigente",
        "cum_status": "activo"
      }'
```

Returns `as_of` (how current the data is), the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`, most recently activated presentation first. Every presentation carries `id` (the CUM code, e.g. `20042480-41`), `file_number` and `cum_sequence` (its two halves), `registration_number`, `product`, `holder`, `status` (the registration's: `Vigente`, `Vencido`, `Perdida Fuerza Ejec`, `Cancelado`, `Negado`, `Suspendido`, `En tramite renov` and others), `cum_status` (`activo` or `inactivo`), `issued_at`, `expires_at`, `cum_active_since`, `cum_inactive_since`, `commercial_description`, `pack_quantity`, `pack_unit`, `medical_sample`, `atc_code`, `atc_description`, `pharmaceutical_form`, `administration_routes[]`, `active_ingredients[]` (`name`, `quantity`, `unit`, `reference_unit`), `parties[]` (`role` and `name`), `modality`, `ium` and `entries`.

## One medicine presentation

`POST /co/invima/medicine/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `cum` | string | **Required.** The CUM code, the `id` of a search result: the file number and the sequence joined by a hyphen, e.g. `20042480-41`. |

```bash theme={"dark"}
curl https://api.croma.run/co/invima/medicine/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "cum": "20042480-41" }'
```

Returns `as_of`, `found`, `cum` and `medicine`. Every presentation carries `id` (the CUM code, e.g. `20042480-41`), `file_number` and `cum_sequence` (its two halves), `registration_number`, `product`, `holder`, `status` (the registration's: `Vigente`, `Vencido`, `Perdida Fuerza Ejec`, `Cancelado`, `Negado`, `Suspendido`, `En tramite renov` and others), `cum_status` (`activo` or `inactivo`), `issued_at`, `expires_at`, `cum_active_since`, `cum_inactive_since`, `commercial_description`, `pack_quantity`, `pack_unit`, `medical_sample`, `atc_code`, `atc_description`, `pharmaceutical_form`, `administration_routes[]`, `active_ingredients[]` (`name`, `quantity`, `unit`, `reference_unit`), `parties[]` (`role` and `name`), `modality`, `ium` and `entries`.

<Note>
  A number INVIMA lists nothing under returns `found: false` with HTTP 200, not an error.
</Note>

<Card title="Full reference" icon="code" href="/api-reference/overview">
  Schemas, all response fields, and an interactive playground.
</Card>


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