A TRM oficial é publicada como dados abertos em datos.gov.co e consulta-se com uma só requisição HTTP sem autenticação; o campo valor chega como texto e um mesmo valor pode valer vários dias, então filtre por data e guarde o resultado em cache.
1. O que é a TRM e onde é publicada#
A Taxa Representativa do Mercado (TRM) é o valor oficial do dólar em pesos colombianos. O conjunto de dados «Tasa de Cambio Representativa del Mercado - TRM» é publicado pela Superintendência Financeira da Colômbia no portal de dados abertos datos.gov.co, que o expõe como uma API de consulta (formato JSON) com quatro campos.
| Campo | O que contém | Exemplo |
|---|---|---|
| valor | Pesos por dólar, como texto | 3181.74 |
| unidad | Moeda da cotação | COP |
| vigenciadesde | Primeiro dia em que vale | 2026-10-14T00:00:00.000 |
| vigenciahasta | Último dia em que vale | 2026-10-14T00:00:00.000 |
A API não pede conta nem chave para consultas simples. O campo valor chega como texto com ponto decimal, e vigenciadesde e vigenciahasta marcam o primeiro e o último dia em que esse valor vale. Em fins de semana e feriados um mesmo valor cobre vários dias: em 17 de outubro de 2026 a API devolveu 3.174,67 com vigência de 17 a 19 de outubro.
Documentação: Dados Abertos da Colômbia: TRM (Superintendência Financeira da Colômbia) ↗
2. Consultar a TRM de uma data em Python#
A função filtra os registros cuja vigência inclui o dia pedido. Usa só a biblioteca padrão e Decimal para não acumular erros de ponto flutuante em dinheiro. O exemplo consulta 14 de outubro de 2026 e converte um plano de 25 dólares por mês.
import json
from decimal import Decimal
from urllib.parse import urlencode
from urllib.request import urlopen
URL = "https://www.datos.gov.co/resource/32sa-8pi3.json"
def trm_do_dia(dia: str) -> Decimal:
"""TRM vigente em uma data (AAAA-MM-DD), em pesos por dólar."""
filtro = f"vigenciadesde <= '{dia}T00:00:00.000' AND vigenciahasta >= '{dia}T00:00:00.000'"
with urlopen(f"{URL}?" + urlencode({"$where": filtro}), timeout=15) as r:
linhas = json.load(r)
if not linhas:
raise LookupError(f"sem TRM para {dia}")
return Decimal(linhas[0]["valor"])
trm = trm_do_dia("2026-10-14")
print(trm) # 3181.74
print(f"{Decimal(25) * trm:,.2f} COP") # um plano de 25 USD por mêsDocumentação: Socrata: consultas con $where ↗ · Python: urllib.request ↗
3. A mesma consulta em JavaScript#
Com fetch, disponível no Node.js e no navegador. O script roda como módulo para poder usar await no nível superior. Formata o resultado com Intl em es-CO.
const URL_TRM = "https://www.datos.gov.co/resource/32sa-8pi3.json";
async function trmDoDia(dia) {
const filtro = `vigenciadesde <= '${dia}T00:00:00.000' AND vigenciahasta >= '${dia}T00:00:00.000'`;
const res = await fetch(`${URL_TRM}?` + new URLSearchParams({ $where: filtro }));
if (!res.ok) throw new Error(`datos.gov.co respondeu ${res.status}`);
const linhas = await res.json();
if (linhas.length === 0) throw new Error(`sem TRM para ${dia}`);
return Number(linhas[0].valor);
}
const trm = await trmDoDia("2026-10-14");
console.log(trm, (25 * trm).toLocaleString("es-CO", { style: "currency", currency: "COP" }));Se você chamar a API do navegador, cada visitante faz a sua própria requisição; para uma página pública é melhor consultá-la do seu servidor e guardar o valor.
Documentação: MDN: Fetch API ↗
4. Boas práticas#
- Guarde o valor do dia em cache e não chame a API a cada requisição dos usuários.
- Guarde a data do valor junto com o valor, e mostre-a: um preço em pesos sem data da TRM não é verificável.
- Tenha um valor de reserva com a sua data para quando a API não responder, e não invente uma taxa.
- Use Decimal (Python) ou inteiros de centavos para o dinheiro, e deixe o arredondamento para o final.
- Trate uma resposta vazia como um caso normal: pode não haver registro para uma data futura.
Para preços internacionais, a TRM é uma referência oficial colombiana, não a taxa de câmbio que o seu banco ou cartão cobrará, que soma a sua própria margem e tarifas.
5. Como a Codifly a usa#
As fichas do catálogo mostram o equivalente em pesos de cada preço com a TRM desta mesma fonte, com a sua data, e recorrem a um valor de reserva datado quando a consulta falha. Você pode ver o resultado nos comparadores de bancos de dados e de nuvem.
Para se aprofundarQuanto custa uma API de IA em reais, pesos e soles (setembro de 2026)
6. Mantenha seus números em dia#
Os valores deste guia são os que a API devolveu em 18 de outubro de 2026. O conjunto de dados e seus campos podem mudar, então revise o registro oficial antes de depender deles em produção.
- Revise o registro do conjunto de dados se a API mudar de forma.
- Teste o seu código com uma data de fim de semana e com uma data sem registro.
- Registre um aviso quando usar o valor de reserva.
Fontes e escopo
Documentação consultada em 18 de outubro de 2026. Os exemplos e critérios de decisão são propostas editoriais; adapte-os ao contrato da sua aplicação e valide-os no seu ambiente de testes autorizado.