Skip to main content
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 Dataset Every trademark case of the register, searchable by sign and owner.
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 Dataset Every patent case of the register, searchable by title and owner.
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 Dataset Every industrial design case of the register, searchable by title and owner.
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 Dataset Every decision and requirement the office sends out, a day at a time, with the document itself.
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 Lookup A trademark case as the register holds it today, with every document of its file.
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).
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).
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: 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.

One patent

POST /co/sic-ip/patent/v1 Lookup A patent case as the register holds it today, with every document of its file.
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).
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).
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: 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.

One industrial design

POST /co/sic-ip/design/v1 Lookup An industrial design case as the register holds it today, with every document of its file.
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).
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).
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: 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.

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.
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).
A large portfolio is read in several passes and can take up to a minute. This is an async job: by default the request waits inline and returns { data }, or you can poll GET /jobs/{id} or pass a callback_url.
Source: Superintendencia de Industria y Comercio, Registro de la Propiedad Industrial. Statuses, names and legal terms stay as the register writes them.

Full reference

Schemas, all response fields, and an interactive playground.