Exchange rates

The 10 most recent exchange rates from the Central Bank of Uruguay (BCU).

Loading exchange rates…

What each column means

The definitions come word for word from the official specification of the exchange-rate web service of the Central Bank of Uruguay (BCU), which does not give more detail. They are translated here from Spanish.

DataAPI fieldBCU fieldOfficial BCU definition (translated)
DatedateFecha“Date of the exchange rate.”
Currency codecurrency_codeMoneda“Code of the currency.”
Currencycurrency_nameNombre“Name of the currency.”
Symbol (next to the currency)isoCodigoISO“Monetary symbol.”
BuybuyTCC“Buy exchange rate.”
SellsellTCV“Sell exchange rate.”
ArbitragearbitrageArbAct“Arbitrage.”

Good to know

  • The BCU field is called CodigoISO, but the specification defines it as a “monetary symbol”: some values are not ISO codes, for example “DLS.”, “U.I.” or “R$”.
  • The BCU also publishes how the arbitrage is expressed (field FormaArbitrar): 0 = units of currency per US dollar, 1 = US dollars per unit of currency, 9 = not applicable. This API does not return it yet; judging by the size of the values, the Argentine peso is expressed in units per dollar and the euro in dollars per unit.
  • The BCU also publishes the country of each currency (field Emisor), which this API does not return for now either.
  • There are no exchange rates for weekends or holidays. UP, UI and UR are published in advance; this site only shows dates up to today.

Source: BCU exchange-rate web service, specification version 3 (28 Sep 2020), updated on 12 Dec 2022. View the specification (PDF, in Spanish) · View the service WSDL

Use this data in your systems

The API is public and free: it returns exchange rates in JSON format, with the whole history since 2020 and no sign-up. If you need other data or a custom service, write to me from the author page.

import requests

URL = "https://apitool.techspot365.com/api/v1/exchange-rates"

# Latest 2 exchange rates for the US dollar (usd)
response = requests.get(URL, params={"currency": "usd", "limit": 2}, timeout=30)
response.raise_for_status()
result = response.json()

for row in result["data"]:
    print(row["date"], row["currency_name"], row["buy"], row["sell"])

# If there are more pages, result["meta"]["has_more"] is True: request page=2, 3, ...