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

# SIC Industrial Property

> Colombia's register of trademarks, patents and industrial designs: search every case, every resolution and oficio, read one case in full with its documents, and list a company's trademark portfolio by NIT.

The Superintendencia de Industria y Comercio (SIC), through its Delegatura para la Propiedad Industrial, keeps Colombia's register of industrial property: every trademark (marks, slogans, trade names, collective and certification marks, extensions of international registrations), every patent (inventions, utility models, PCT national phases, layout designs) and every industrial design, about a million cases, with the decisions issued in each.

Croma keeps the register as datasets: one row per case with its status, owners, classes and label, about 0.9 million trademarks since 1930 and every patent and design, refreshed daily; and every resolution and oficio the office sends out since 2016, with its PDF. A case read in full (parties, goods and services, history, oppositions and transfers, every document of the file) is kept too, and served from Croma's copy afterwards.

Search cases or decisions first, then read one case in full by its file number, or list a company's trademarks by its NIT.

## Search trademarks

`POST /co/sic-ip/trademarks-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

Every trademark case of the register, searchable by sign and owner.

| Field | Type | Notes |
| - | - | - |
| `query` | string | Optional words of the sign or the owner's name, e.g. `cafe`. Every word must appear. |
| `status` | string | Optional status exactly as the register words it, e.g. `Registrada`, `Publicada`, `Concedida`, `Negada`, `Caducado`. |
| `nice_class` | string | Optional Nice class, 1 to 45, e.g. `36` (financial services). |
| `certificate_number` | string | Optional registration certificate number, e.g. `612592`. |
| `from_date` | string | Optional first filing date, `yyyy-mm-dd`. |
| `to_date` | string | Optional last filing date, `yyyy-mm-dd`. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-50). Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/sic-ip/trademarks-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "cafe", "nice_class": "30" }'
```

Returns `as_of` (how current the copy is), the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`, most recently filed first. Every trademark carries `file_number` (the expediente), `certificate_number` (once registered), `sign` (the denominación; null for a purely figurative mark), `status` as the register words it (`Publicada`, `Registrada`, `Negada`, `Caducado`...), `filing_date`, `expires_on` (the vigencia), `owners[]` (the titulares, or the applicants while pending), `nice_classes[]`, `gazette_number` and the label: `label_url` (Croma's copy, byte for byte) and `source_label_url` (the register's own link).

## Search patents

`POST /co/sic-ip/patents-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

Every patent case of the register, searchable by title and owner.

| Field | Type | Notes |
| - | - | - |
| `query` | string | Optional words of the title or the owner's name, e.g. `dispositivo`. |
| `status` | string | Optional status exactly as the register words it, e.g. `Registrada`, `Publicada`, `Concedida`, `Negada`, `Caducado`. |
| `from_date` | string | Optional first filing date, `yyyy-mm-dd`. |
| `to_date` | string | Optional last filing date, `yyyy-mm-dd`. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-50). Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/sic-ip/patents-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "dispositivo", "from_date": "2025-01-01" }'
```

Returns `as_of` (how current the copy is), the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`, most recently filed first. Every case carries `file_number`, `certificate_number` (the grant, once granted), `title`, `status` as the register words it, `filing_date`, `expires_on`, `owners[]` and the characteristic figure: `figure_url` (Croma's copy) and `source_figure_url`.

## Search industrial designs

`POST /co/sic-ip/designs-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

Every industrial design case of the register, searchable by title and owner.

| Field | Type | Notes |
| - | - | - |
| `query` | string | Optional words of the title or the owner's name, e.g. `botella`. |
| `status` | string | Optional status exactly as the register words it, e.g. `Registrada`, `Publicada`, `Concedida`, `Negada`, `Caducado`. |
| `from_date` | string | Optional first filing date, `yyyy-mm-dd`. |
| `to_date` | string | Optional last filing date, `yyyy-mm-dd`. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-50). Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/sic-ip/designs-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "botella" }'
```

Returns `as_of` (how current the copy is), the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`, most recently filed first. Every case carries `file_number`, `certificate_number` (the grant, once granted), `title`, `status` as the register words it, `filing_date`, `expires_on`, `owners[]` and the characteristic figure: `figure_url` (Croma's copy) and `source_figure_url`.

## Search resolutions and oficios

`POST /co/sic-ip/resolutions-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

Every decision and requirement the office sends out, a day at a time, with the document itself.

| Field | Type | Notes |
| - | - | - |
| `query` | string | Optional words of the document type or a party's name, e.g. `cancelación`, `garantía mobiliaria`. |
| `file_number` | string | Optional file number: the request the document answers or the main case it belongs to, e.g. `SD2026/0083453`. |
| `kind` | enum | Optional `resolucion` or `oficio`; empty lists both. |
| `from_date` | string | Optional first day the documents were sent, `yyyy-mm-dd`. |
| `to_date` | string | Optional last day the documents were sent, `yyyy-mm-dd`. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-50). Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/sic-ip/resolutions-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "cancelación", "kind": "resolucion" }'
```

Returns `as_of`, the applied filters, the paging fields and `results[]`, most recently sent first. Every document carries `document_id`, `kind`, `resolution_number`, `title` (the type, e.g. `TM179 - Acepta Cancelación`), `template_code` (`TM179`), `act_date`, `sent_date`, `file_number`, `main_file_number`, `parties[]` (`name`, `notified_on`, `enforced_on`), `notified_on`, `enforced_on`, `document_url` (Croma's copy of the PDF), `source_document_url` and `bytes`.

## One trademark

`POST /co/sic-ip/trademark/v1` <a className="dataset-pill" href="/datasets#lookups">Lookup</a>

A trademark case as the register holds it today, with every document of its file.

<Note>
  Answers from Croma's copy when it holds a recent answer for the key, otherwise reads the source and keeps the answer. Every response says when the source was last asked (`checked_at`) and where the answer came from (`served_from`).
</Note>

| Field | Type | Notes |
| - | - | - |
| `file_number` | string | **Required.** **Required.** The case's file number (expediente), e.g. `SD2026/0066943`; the consecutive may be written without its leading zeros. Files opened before 2016 use bare digits (`16137606`). |

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

Returns `found`, `file_number`, `checked_at` (when the register was last asked), `served_from` (`copy` within a day of the last read, `upstream` when the register was read for this request, `stale` when it could not be read and the last stored answer stood in) and `trademark`. The case carries `file_number`, `kind`, `procedure_type`, `status`, `title` (the sign or the title), `sign_type` and `sign_nature` (trademarks), the dates `filing_date`, `submitted_on`, `publication_ordered_on`, `published_on`, `registered_on` and `expires_on`, `gazette_number`, `certificate_number`, `classes[]` (each Nice class with its goods and services) and `nice_classes[]`, `locarno[]` (designs), `patent_type`, `technology_sector`, `technology_subsector` and `abstract` (patents), `design_type` (designs), `parties[]` (`role`: `owner`, `applicant`, `agent`, `contact`, `inventor` or `designer`, with `document_number`, `name` and `address` as the register records them), `images[]` (the label or the figures), `specification[]` (a patent's public description, claims and drawings), `history[]` (every procedural event, newest first, the gazette entry included), `linked_procedures[]` (oppositions, transfers, licences, changes of name, corrections), `documents[]` (every document of the file: resolutions, oficios, filings, certificates, with `resolution_number`, the dates and the parties notified), `documents_total`, `documents_kept` and `fields[]` (every labelled field of the case as the register prints it). Every file carries `document_url` (Croma's copy, byte for byte) and `source_document_url` (the register's own link).

<Note>
  Reading a case keeps a copy of every document in its file, which can take a minute or two for a file with many documents. This is an [async job](/async-jobs): by default the request waits inline and returns `{ data }`, or you can poll `GET /jobs/{id}` or pass a `callback_url`. A case read within the last day answers from Croma's copy at once. A number with no case of this kind returns `found: false` with HTTP 200, not an error.
</Note>

## One patent

`POST /co/sic-ip/patent/v1` <a className="dataset-pill" href="/datasets#lookups">Lookup</a>

A patent case as the register holds it today, with every document of its file.

<Note>
  Answers from Croma's copy when it holds a recent answer for the key, otherwise reads the source and keeps the answer. Every response says when the source was last asked (`checked_at`) and where the answer came from (`served_from`).
</Note>

| Field | Type | Notes |
| - | - | - |
| `file_number` | string | **Required.** **Required.** The case's file number, e.g. `NC2026/0006185`. |

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

Returns `found`, `file_number`, `checked_at` (when the register was last asked), `served_from` (`copy` within a day of the last read, `upstream` when the register was read for this request, `stale` when it could not be read and the last stored answer stood in) and `patent`. The case carries `file_number`, `kind`, `procedure_type`, `status`, `title` (the sign or the title), `sign_type` and `sign_nature` (trademarks), the dates `filing_date`, `submitted_on`, `publication_ordered_on`, `published_on`, `registered_on` and `expires_on`, `gazette_number`, `certificate_number`, `classes[]` (each Nice class with its goods and services) and `nice_classes[]`, `locarno[]` (designs), `patent_type`, `technology_sector`, `technology_subsector` and `abstract` (patents), `design_type` (designs), `parties[]` (`role`: `owner`, `applicant`, `agent`, `contact`, `inventor` or `designer`, with `document_number`, `name` and `address` as the register records them), `images[]` (the label or the figures), `specification[]` (a patent's public description, claims and drawings), `history[]` (every procedural event, newest first, the gazette entry included), `linked_procedures[]` (oppositions, transfers, licences, changes of name, corrections), `documents[]` (every document of the file: resolutions, oficios, filings, certificates, with `resolution_number`, the dates and the parties notified), `documents_total`, `documents_kept` and `fields[]` (every labelled field of the case as the register prints it). Every file carries `document_url` (Croma's copy, byte for byte) and `source_document_url` (the register's own link).

<Note>
  Reading a case keeps a copy of every document in its file, which can take a minute or two for a file with many documents. This is an [async job](/async-jobs): by default the request waits inline and returns `{ data }`, or you can poll `GET /jobs/{id}` or pass a `callback_url`. A case read within the last day answers from Croma's copy at once. A number with no case of this kind returns `found: false` with HTTP 200, not an error.
</Note>

## One industrial design

`POST /co/sic-ip/design/v1` <a className="dataset-pill" href="/datasets#lookups">Lookup</a>

An industrial design case as the register holds it today, with every document of its file.

<Note>
  Answers from Croma's copy when it holds a recent answer for the key, otherwise reads the source and keeps the answer. Every response says when the source was last asked (`checked_at`) and where the answer came from (`served_from`).
</Note>

| Field | Type | Notes |
| - | - | - |
| `file_number` | string | **Required.** **Required.** The case's file number, e.g. `NC2026/0004592`. |

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

Returns `found`, `file_number`, `checked_at` (when the register was last asked), `served_from` (`copy` within a day of the last read, `upstream` when the register was read for this request, `stale` when it could not be read and the last stored answer stood in) and `design`. The case carries `file_number`, `kind`, `procedure_type`, `status`, `title` (the sign or the title), `sign_type` and `sign_nature` (trademarks), the dates `filing_date`, `submitted_on`, `publication_ordered_on`, `published_on`, `registered_on` and `expires_on`, `gazette_number`, `certificate_number`, `classes[]` (each Nice class with its goods and services) and `nice_classes[]`, `locarno[]` (designs), `patent_type`, `technology_sector`, `technology_subsector` and `abstract` (patents), `design_type` (designs), `parties[]` (`role`: `owner`, `applicant`, `agent`, `contact`, `inventor` or `designer`, with `document_number`, `name` and `address` as the register records them), `images[]` (the label or the figures), `specification[]` (a patent's public description, claims and drawings), `history[]` (every procedural event, newest first, the gazette entry included), `linked_procedures[]` (oppositions, transfers, licences, changes of name, corrections), `documents[]` (every document of the file: resolutions, oficios, filings, certificates, with `resolution_number`, the dates and the parties notified), `documents_total`, `documents_kept` and `fields[]` (every labelled field of the case as the register prints it). Every file carries `document_url` (Croma's copy, byte for byte) and `source_document_url` (the register's own link).

<Note>
  Reading a case keeps a copy of every document in its file, which can take a minute or two for a file with many documents. This is an [async job](/async-jobs): by default the request waits inline and returns `{ data }`, or you can poll `GET /jobs/{id}` or pass a `callback_url`. A case read within the last day answers from Croma's copy at once. A number with no case of this kind returns `found: false` with HTTP 200, not an error.
</Note>

## Trademarks by owner

`POST /co/sic-ip/trademarks-by-owner/v1` Every trademark case a company or a person owns or applied for, from the register.

| Field | Type | Notes |
| - | - | - |
| `document_number` | string | **Required.** **Required.** The owner's NIT (with or without its check digit) or cédula, digits only, e.g. `800176089`. |

```bash theme={"dark"}
curl https://api.croma.run/co/sic-ip/trademarks-by-owner/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "document_number": "800176089" }'
```

Returns `document_number`, `found`, `parties[]` (the register's party records the number matched, each with `document_number` and `name`), `total`, `checked_at` and `trademarks[]`, most recently filed first, each shaped like a trademarks search result (`label_url` is Croma's copy when the trademarks dataset already holds the case).

<Note>
  A large portfolio is read in several passes and can take up to a minute. This is an [async job](/async-jobs): by default the request waits inline and returns `{ data }`, or you can poll `GET /jobs/{id}` or pass a `callback_url`.
</Note>

Source: Superintendencia de Industria y Comercio, Registro de la Propiedad Industrial. Statuses, names and legal terms stay as the register writes them.

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