API da TRM da Colômbia: como consultar o dólar oficial em Python e JavaScript

Como consultar a Taxa Representativa do Mercado a partir dos dados abertos da Colômbia, sem conta nem chave, com funções em Python e JavaScript, o tratamento de fins de semana e o que fazer quando a API falha.

Neste artigo
Em 30 segundos

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.

CampoO que contémExemplo
valorPesos por dólar, como texto3181.74
unidadMoeda da cotaçãoCOP
vigenciadesdePrimeiro dia em que vale2026-10-14T00:00:00.000
vigenciahastaÚltimo dia em que vale2026-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.

python
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ês
Resultado real da API em 18 de outubro de 2026: 3181.74 e 79,543.50 COP. Um dia mais recente devolverá outro valor.

Documentaçã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.

javascript
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" }));
Imprime 3181.74 e o valor em pesos no formato da Colômbia.

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.

Compare estas opções

Compare bancos de dados

Confira preços, limites, condições e fontes de cada opção.

Abrir comparador
Consultoria

Seu caso é diferente?

Conte seu contexto e as opções que você está avaliando. Respondemos com critérios e fontes, sem assinaturas automáticas.

Pedir consultoria