La TRM oficial se publica como datos abiertos en datos.gov.co y se consulta con una sola petición HTTP sin autenticación; el campo valor llega como texto y un mismo valor puede regir varios días, así que filtra por fecha y guarda el resultado en caché.
1. Qué es la TRM y dónde se publica#
La Tasa Representativa del Mercado (TRM) es el valor oficial del dólar en pesos colombianos. El conjunto de datos «Tasa de Cambio Representativa del Mercado - TRM» lo publica la Superintendencia Financiera de Colombia en el portal de datos abiertos datos.gov.co, que lo expone como una API de consulta (formato JSON) con cuatro campos.
| Campo | Qué contiene | Ejemplo |
|---|---|---|
| valor | Pesos por dólar, como texto | 3181.74 |
| unidad | Moneda de la cotización | COP |
| vigenciadesde | Primer día en que rige | 2026-10-14T00:00:00.000 |
| vigenciahasta | Último día en que rige | 2026-10-14T00:00:00.000 |
La API no pide cuenta ni clave para consultas simples. El campo valor llega como texto con punto decimal, y vigenciadesde y vigenciahasta marcan el primer y el último día en que ese valor rige. En fines de semana y festivos un mismo valor cubre varios días: el 17 de octubre de 2026 la API devolvió 3.174,67 con vigencia del 17 al 19 de octubre.
Documentación: Datos Abiertos: TRM (Superintendencia Financiera de Colombia) ↗
2. Consultar la TRM de una fecha en Python#
La función filtra los registros cuya vigencia incluye el día pedido. Usa solo la biblioteca estándar y Decimal para no acumular errores de punto flotante en dinero. El ejemplo consulta el 14 de octubre de 2026 y convierte un plan de 25 dólares al mes.
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_del_dia(dia: str) -> Decimal:
"""TRM vigente en una fecha (AAAA-MM-DD), en 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:
filas = json.load(r)
if not filas:
raise LookupError(f"sin TRM para {dia}")
return Decimal(filas[0]["valor"])
trm = trm_del_dia("2026-10-14")
print(trm) # 3181.74
print(f"{Decimal(25) * trm:,.2f} COP") # un plan de 25 USD al mesDocumentación: Socrata: consultas con $where ↗ · Python: urllib.request ↗
3. La misma consulta en JavaScript#
Con fetch, disponible en Node.js y en el navegador. El script se ejecuta como módulo para poder usar await al nivel superior. Formatea el resultado con Intl en es-CO.
const URL_TRM = "https://www.datos.gov.co/resource/32sa-8pi3.json";
async function trmDelDia(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 respondió ${res.status}`);
const filas = await res.json();
if (filas.length === 0) throw new Error(`sin TRM para ${dia}`);
return Number(filas[0].valor);
}
const trm = await trmDelDia("2026-10-14");
console.log(trm, (25 * trm).toLocaleString("es-CO", { style: "currency", currency: "COP" }));Si llamas la API desde el navegador, ten en cuenta que cada visitante hace su propia petición; para una página pública es mejor consultarla desde tu servidor y guardar el valor.
Documentación: MDN: Fetch API ↗
4. Buenas prácticas#
- Guarda el valor del día en caché y no llames a la API en cada petición de tus usuarios.
- Conserva la fecha del valor junto al valor, y muéstrala: un precio en pesos sin fecha de TRM no es verificable.
- Ten un valor de respaldo con su fecha para cuando la API no responda, y no inventes una tasa.
- Usa Decimal (Python) o enteros de centavos para el dinero, y deja el redondeo para el final.
- Trata una respuesta vacía como un caso normal: puede no haber registro para una fecha futura.
Para precios internacionales, la TRM es una referencia oficial colombiana, no el tipo de cambio que te cobrará tu banco o tu tarjeta, que suma su propio margen y comisiones.
5. Cómo lo usa Codifly#
Las fichas del catálogo muestran el equivalente en pesos de cada precio con la TRM de esta misma fuente, con su fecha, y recurren a un valor de respaldo fechado cuando la consulta falla. Puedes ver el resultado en los comparadores de bases de datos y de nube.
Para profundizarCuánto cuesta una API de IA en pesos, reales y soles (septiembre de 2026)
6. Mantén tus cifras al día#
Los valores de esta guía son los que la API devolvió el 18 de octubre de 2026. El conjunto de datos y sus campos pueden cambiar, así que revisa la ficha oficial antes de depender de ellos en producción.
- Revisa la ficha del conjunto de datos si la API cambia de forma.
- Prueba tu código con una fecha de fin de semana y con una fecha sin registro.
- Registra un aviso cuando uses el valor de respaldo.
Fuentes y alcance
Documentación consultada el 18 de octubre de 2026. Los ejemplos y criterios de decisión son propuestas editoriales; adáptalos al contrato de tu aplicación y valídalos en tu entorno de pruebas autorizado.