Guide · 6 Verified sources

Compare central bank exchange rates every business day

Monitor exchange rates published by the ECB, Danmarks Nationalbank, the Riksbank, the Czech National Bank, the National Bank of Ukraine and the U.S. Treasury, with an alert for each new day's rates and each correction.

Start with Euro foreign exchange reference rates, last 90 daysREST API, CLI and MCP

The problem

Central banks publish their own exchange rates, and the tables are not interchangeable. Each quotes rates against its own currency, in its own unit, at its own time of day. The ECB gives units of each currency per 1 euro; Danmarks Nationalbank gives Danish kroner per 100 units of foreign currency; the Riksbank gives kronor per unit or per 100 units, as each series defines; the Czech National Bank gives koruna per a stated amount of 1, 100 or 1,000 units; the National Bank of Ukraine gives hryvnias per one unit; and the U.S. Treasury gives euros per U.S. dollar.

Publication times differ too. The ECB publishes around 16:00 CET each TARGET business day, from a concertation procedure between central banks normally held at 14:10 CET. The Riksbank publishes at 16:15 on each Swedish banking day, and since 27 November 2023 its rates are the ECB's reference rates converted to kronor. The Czech National Bank declares its fixing at around 2.30 p.m. each working day, valid also for any following weekend or public holiday. After 3:30 p.m. Kyiv time, the National Bank of Ukraine's service returns the rates set for the next business day. The Treasury's reporting rates are quarterly, amended during the quarter when a rate moves by 10% or more.

This guide sets up one monitor per publisher from Verified recipes that read each publisher's own file or keyless API, so every rate arrives with the exact response it was read from.

What the source contains

Euro foreign exchange reference rates, last 90 days · European Central Bank

The European Central Bank's daily euro reference rates against about 30 currencies for the last 90 days, one record per business day with each currency's rate in units per euro.

30 typed fields · 64 records in SourceFinch's latest run on October 12, 2026 · publisher updates: each TARGET business day, around 16:00 CET · full source page

FieldTypeDescriptionSample value
datekeydateReference date the rates were set (YYYY-MM-DD), one record per TARGET business day. The record key.2026-10-12
usdnumber, nullableEuro reference rate for the U.S. dollar: units of USD per 1 euro.1.1181
jpynumber, nullableEuro reference rate for the Japanese yen: units of JPY per 1 euro.177.33
czknumber, nullableEuro reference rate for the Czech koruna: units of CZK per 1 euro.24.391
dkknumber, nullableEuro reference rate for the Danish krone: units of DKK per 1 euro.7.4748
gbpnumber, nullableEuro reference rate for the pound sterling: units of GBP per 1 euro.0.84478
hufnumber, nullableEuro reference rate for the Hungarian forint: units of HUF per 1 euro.365.13
plnnumber, nullableEuro reference rate for the Polish zloty: units of PLN per 1 euro.4.385
ronnumber, nullableEuro reference rate for the Romanian leu: units of RON per 1 euro.5.337
seknumber, nullableEuro reference rate for the Swedish krona: units of SEK per 1 euro.11.1965
chfnumber, nullableEuro reference rate for the Swiss franc: units of CHF per 1 euro.0.9312
isknumber, nullableEuro reference rate for the Icelandic krona: units of ISK per 1 euro.136.4
noknumber, nullableEuro reference rate for the Norwegian krone: units of NOK per 1 euro.10.6955
trynumber, nullableEuro reference rate for the Turkish lira: units of TRY per 1 euro.55.1635
audnumber, nullableEuro reference rate for the Australian dollar: units of AUD per 1 euro.1.6032
brlnumber, nullableEuro reference rate for the Brazilian real: units of BRL per 1 euro.5.5819
cadnumber, nullableEuro reference rate for the Canadian dollar: units of CAD per 1 euro.1.5946
cnynumber, nullableEuro reference rate for the Chinese yuan renminbi: units of CNY per 1 euro.7.4832
hkdnumber, nullableEuro reference rate for the Hong Kong dollar: units of HKD per 1 euro.8.7743
idrnumber, nullableEuro reference rate for the Indonesian rupiah: units of IDR per 1 euro.20036.18
ilsnumber, nullableEuro reference rate for the Israeli shekel: units of ILS per 1 euro.3.432
inrnumber, nullableEuro reference rate for the Indian rupee: units of INR per 1 euro.107.086
krwnumber, nullableEuro reference rate for the South Korean won: units of KRW per 1 euro.1490.53
mxnnumber, nullableEuro reference rate for the Mexican peso: units of MXN per 1 euro.20.5081
myrnumber, nullableEuro reference rate for the Malaysian ringgit: units of MYR per 1 euro.4.5663
nzdnumber, nullableEuro reference rate for the New Zealand dollar: units of NZD per 1 euro.1.9968
phpnumber, nullableEuro reference rate for the Philippine peso: units of PHP per 1 euro.70.169
sgdnumber, nullableEuro reference rate for the Singapore dollar: units of SGD per 1 euro.1.4314
thbnumber, nullableEuro reference rate for the Thai baht: units of THB per 1 euro.37.585
zarnumber, nullableEuro reference rate for the South African rand: units of ZAR per 1 euro.18.4945

Danish krone exchange rates, last five business days · Danmarks Nationalbank

Danmarks Nationalbank's daily exchange rates of the Danish krone against about 30 currencies and the SDR for the last five business days, in kroner per 100 units, one record per day.

31 typed fields · 5 records in SourceFinch's latest run on October 12, 2026 · publisher updates: each Danish banking day · full source page

Fields and a sample record
FieldTypeDescriptionSample value
datekeydateBusiness day the rates were fixed (YYYY-MM-DD), one record per day. The record key.2026-10-06
audnumber, nullableDanish kroner per 100 units of the Australian dollar (AUD).463.12
brlnumber, nullableDanish kroner per 100 units of the Brazilian real (BRL).133.5
cadnumber, nullableDanish kroner per 100 units of the Canadian dollar (CAD).465.48
cnynumber, nullableDanish kroner per 100 units of the Chinese yuan renminbi (CNY).98.93
czknumber, nullableDanish kroner per 100 units of the Czech koruna (CZK).30.63
eurnumber, nullableDanish kroner per 100 units of the euro (EUR).747.47
hkdnumber, nullableDanish kroner per 100 units of the Hong Kong dollar (HKD).84.52
hufnumber, nullableDanish kroner per 100 units of the Hungarian forint (HUF).2.048
isknumber, nullableDanish kroner per 100 units of the Icelandic krona (ISK).5.448
inrnumber, nullableDanish kroner per 100 units of the Indian rupee (INR).6.88
idrnumber, nullableDanish kroner per 100 units of the Indonesian rupiah (IDR).0.0372
ilsnumber, nullableDanish kroner per 100 units of the Israeli shekel (ILS).217.62
jpynumber, nullableDanish kroner per 100 units of the Japanese yen (JPY).4.1957
myrnumber, nullableDanish kroner per 100 units of the Malaysian ringgit (MYR).162.37
mxnnumber, nullableDanish kroner per 100 units of the Mexican peso (MXN).36.96
nzdnumber, nullableDanish kroner per 100 units of the New Zealand dollar (NZD).372.6
noknumber, nullableDanish kroner per 100 units of the Norwegian krone (NOK).69.35
phpnumber, nullableDanish kroner per 100 units of the Philippine peso (PHP).10.57
plnnumber, nullableDanish kroner per 100 units of the Polish zloty (PLN).171.24
gbpnumber, nullableDanish kroner per 100 units of the pound sterling (GBP).880.62
ronnumber, nullableDanish kroner per 100 units of the Romanian leu (RON).139.69
xdrnumber, nullableDanish kroner per 100 units of the IMF special drawing right (SDR) (XDR).899.35
sgdnumber, nullableDanish kroner per 100 units of the Singapore dollar (SGD).519.36
zarnumber, nullableDanish kroner per 100 units of the South African rand (ZAR).40.22
krwnumber, nullableDanish kroner per 100 units of the South Korean won (KRW).0.4954
seknumber, nullableDanish kroner per 100 units of the Swedish krona (SEK).66.49
chfnumber, nullableDanish kroner per 100 units of the Swiss franc (CHF).798.66
thbnumber, nullableDanish kroner per 100 units of the Thai baht (THB).19.76
trynumber, nullableDanish kroner per 100 units of the Turkish lira (TRY).13.49
usdnumber, nullableDanish kroner per 100 units of the U.S. dollar (USD).663.3

Swedish krona exchange rates, latest by currency · Sveriges Riksbank

Sveriges Riksbank's latest published exchange rate of the Swedish krona for each currency series, one record per series with its date and value in kronor per unit.

3 typed fields · 53 records in SourceFinch's latest run on October 12, 2026 · publisher updates: each Swedish banking day at 16:15 CET · full source page

Fields and a sample record
FieldTypeDescriptionSample value
series_idkeystringRiksbank series id, for example SEKUSDPMI (kronor per U.S. dollar) or SEKEURPMI (kronor per euro). The record key.SEKATSPMI
datedate, nullableDate of the series' latest published observation (YYYY-MM-DD).2002-02-28
valuenumberExchange rate in Swedish kronor per unit (or per 100 units, as the series defines) of the foreign currency.0.66033

Czech koruna exchange rate fixing, daily · Czech National Bank

The Czech National Bank's daily exchange rates of the Czech koruna against about 30 commonly traded currencies, one record per currency with the date, amount and rate in koruna.

7 typed fields · 30 records in SourceFinch's latest run on October 12, 2026 · publisher updates: each working day at around 2.30 p.m. CET · full source page

Fields and a sample record
FieldTypeDescriptionSample value
currency_codekeystringISO 4217 code of the foreign currency. The record key.AUD
valid_fordate, nullableDate the declared rate is valid for (YYYY-MM-DD); it also applies to any following weekend or public holiday.2026-10-12
fixing_numberinteger, nullableThe CNB's running number of the fixing within the year.196
countrystring, nullableCountry or area of the currency, as the CNB names it (for example EMU for the euro).Australia
currencystring, nullableName of the currency in English.dollar
amountinteger, nullableNumber of currency units the rate refers to (1, 100 or 1,000).1
ratenumberCzech koruna per the stated amount of the foreign currency.15.212

Ukrainian hryvnia exchange rates set by the National Bank of Ukraine, daily · National Bank of Ukraine

The National Bank of Ukraine's daily hryvnia exchange rates against about 45 foreign currencies, one record per currency with the rate in hryvnias per unit and the date it applies to.

6 typed fields · 45 records in SourceFinch's latest run on October 12, 2026 · publisher updates: each business day; the next day's rates appear after 3:30 p.m. Kyiv time · full source page

Fields and a sample record
FieldTypeDescriptionSample value
currency_codekeystringISO 4217 alphabetic code of the foreign currency. The record key.DZD
numeric_codeinteger, nullableISO 4217 numeric code of the currency (r030).12
name_ukstring, nullableName of the currency in Ukrainian, as published.Алжирський динар
ratenumberHryvnias per one unit of the foreign currency.0.33417
exchange_datestring, nullableDate the rate applies to, as published (DD.MM.YYYY).13.10.2026
specialstring, nullableThe NBU's flag for a rate calculated under special conditions (null when not flagged).—

U.S. Treasury reporting rate of exchange for the euro, quarterly · Bureau of the Fiscal Service (U.S. Department of the Treasury)

The U.S. Treasury's reporting rate of exchange for the euro (euros per U.S. dollar) for the last 40 quarters and mid-quarter amendments, one record per effective date.

6 typed fields · 40 records in SourceFinch's latest run on October 12, 2026 · publisher updates: quarterly, with amendments during the quarter · full source page

Fields and a sample record
FieldTypeDescriptionSample value
effective_datekeydateDate the rate takes effect (YYYY-MM-DD); a mid-quarter amendment has its own date. The record key.2026-09-30
record_datedate, nullableQuarter-end date of the report the rate belongs to (YYYY-MM-DD).2026-09-30
exchange_ratenumberTreasury reporting rate: euros per U.S. dollar.0.881
countrystring, nullableCountry or area as published (Euro Zone).Euro Zone
currencystring, nullableCurrency name as published (Euro).Euro
country_currencystring, nullableTreasury's combined country and currency label (Euro Zone-Euro).Euro Zone-Euro

What a change means

  • ECB and Danmarks Nationalbank: one record per business day. A new date is another day's rates; a changed currency field, such as usd or eur, on a date you already have is a correction of a published day.
  • Riksbank: one record per currency series. A new date and value on a series_id is that currency's latest rate. Discontinued series, such as the pre-euro currencies, do not change.
  • Czech National Bank and National Bank of Ukraine: one record per currency_code. A changed rate with a new valid_for or exchange_date is the next fixing. A non-null special marks an NBU rate calculated under special conditions.
  • Treasury: a new effective_date is a new quarter's rate or a mid-quarter amendment. exchange_rate is in euros per U.S. dollar, the inverse of the ECB's usd field.

Set it up in the console

  1. Open the Verified recipe. Open the Euro foreign exchange reference rates, last 90 days recipe in the console. It keeps the reviewed URL, fields and record key (date), and shows the latest captured sample. Open in the console
  2. Create the monitor. Name the monitor, keep the daily schedule or pick another (the console shows the monthly run cost), confirm that you have the right to monitor the source, and choose Create monitor.
  3. Run the baseline. The first run is the baseline: every record is new. From the second run on, the monitor reports what was added, changed or removed, field by field, with the evidence behind each value.
  4. Choose how you hear about changes. In Alerts, choose immediate change emails or a daily or weekly digest; each monitor can override that on its own page. For your own systems, add a signed webhook in Destinations. Alerts and team
  5. Add the other publishers. Open the Danmarks Nationalbank, Riksbank, Czech National Bank, National Bank of Ukraine and Treasury recipes the same way. Each publisher is its own monitor, so you can keep only the base currencies you need.

The other recipes: Danish krone exchange rates, last five business days, Swedish krona exchange rates, latest by currency, Czech koruna exchange rate fixing, daily, Ukrainian hryvnia exchange rates set by the National Bank of Ukraine, daily, U.S. Treasury reporting rate of exchange for the euro, quarterly.

The same through the REST API, CLI or MCP

Every surface creates the same monitor from the same Verified recipe. You confirm you have the right to collect the source (rights: true).

Euro foreign exchange reference rates, last 90 days

REST API

Create an API key under Console → API & access. Reference: /docs/api.

# the Verified entry (fields, recipe, sample, terms) as JSON
curl https://sourcefinch.com/v1/catalog/ecb-euro-foreign-exchange-reference-rates -H "Authorization: Bearer $SOURCEFINCH_API_KEY"

# create the monitor from source.json (below)
curl -X POST https://sourcefinch.com/v1/sources \
  -H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d @source.json

# then run it now (later runs follow the schedule)
curl -X POST https://sourcefinch.com/v1/sources/$SOURCE_ID/runs \
  -H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

CLI

The sourcefinch CLI is not on npm yet; see /docs/cli.

sourcefinch login
sourcefinch catalog get ecb-euro-foreign-exchange-reference-rates --source-json > source.json
sourcefinch sources create --file source.json
sourcefinch runs create $SOURCE_ID --wait
sourcefinch records $SOURCE_ID

MCP

Remote MCP server with OAuth; see /docs/mcp.

claude mcp add --transport http sourcefinch https://sourcefinch.com/mcp

# then ask your agent:
"Use SourceFinch to monitor Euro foreign exchange reference rates, last 90 days: get_catalog_source ecb-euro-foreign-exchange-reference-rates,
then create_source with its create_source_args (dry run first), then run_source."

source.json

The request body the API and CLI examples send.

{
  "name": "Euro foreign exchange reference rates, last 90 days",
  "url": "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml",
  "recipe": {
    "mode": "http",
    "format": "xml",
    "items": "Cube[time]",
    "fields": {
      "aud": "Cube[currency=\"AUD\"]@rate",
      "brl": "Cube[currency=\"BRL\"]@rate",
      "cad": "Cube[currency=\"CAD\"]@rate",
      "chf": "Cube[currency=\"CHF\"]@rate",
      "cny": "Cube[currency=\"CNY\"]@rate",
      "czk": "Cube[currency=\"CZK\"]@rate",
      "dkk": "Cube[currency=\"DKK\"]@rate",
      "gbp": "Cube[currency=\"GBP\"]@rate",
      "hkd": "Cube[currency=\"HKD\"]@rate",
      "huf": "Cube[currency=\"HUF\"]@rate",
      "idr": "Cube[currency=\"IDR\"]@rate",
      "ils": "Cube[currency=\"ILS\"]@rate",
      "inr": "Cube[currency=\"INR\"]@rate",
      "isk": "Cube[currency=\"ISK\"]@rate",
      "jpy": "Cube[currency=\"JPY\"]@rate",
      "krw": "Cube[currency=\"KRW\"]@rate",
      "mxn": "Cube[currency=\"MXN\"]@rate",
      "myr": "Cube[currency=\"MYR\"]@rate",
      "nok": "Cube[currency=\"NOK\"]@rate",
      "nzd": "Cube[currency=\"NZD\"]@rate",
      "php": "Cube[currency=\"PHP\"]@rate",
      "pln": "Cube[currency=\"PLN\"]@rate",
      "ron": "Cube[currency=\"RON\"]@rate",
      "sek": "Cube[currency=\"SEK\"]@rate",
      "sgd": "Cube[currency=\"SGD\"]@rate",
      "thb": "Cube[currency=\"THB\"]@rate",
      "try": "Cube[currency=\"TRY\"]@rate",
      "usd": "Cube[currency=\"USD\"]@rate",
      "zar": "Cube[currency=\"ZAR\"]@rate",
      "date": "@time"
    },
    "required": [
      "date"
    ],
    "types": {
      "aud": "number",
      "brl": "number",
      "cad": "number",
      "chf": "number",
      "cny": "number",
      "czk": "number",
      "dkk": "number",
      "gbp": "number",
      "hkd": "number",
      "huf": "number",
      "idr": "number",
      "ils": "number",
      "inr": "number",
      "isk": "number",
      "jpy": "number",
      "krw": "number",
      "mxn": "number",
      "myr": "number",
      "nok": "number",
      "nzd": "number",
      "php": "number",
      "pln": "number",
      "ron": "number",
      "sek": "number",
      "sgd": "number",
      "thb": "number",
      "try": "number",
      "usd": "number",
      "zar": "number",
      "date": "date"
    }
  },
  "key_field": "date",
  "schedule": "daily",
  "rights": true,
  "catalog": {
    "slug": "ecb-euro-foreign-exchange-reference-rates",
    "version_id": "8aac4f83-4b68-4a87-898e-d3438c33b043"
  }
}
Danish krone exchange rates, last five business days

REST API

Create an API key under Console → API & access. Reference: /docs/api.

# the Verified entry (fields, recipe, sample, terms) as JSON
curl https://sourcefinch.com/v1/catalog/danmarks-nationalbank-krone-exchange-rates -H "Authorization: Bearer $SOURCEFINCH_API_KEY"

# create the monitor from source.json (below)
curl -X POST https://sourcefinch.com/v1/sources \
  -H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d @source.json

# then run it now (later runs follow the schedule)
curl -X POST https://sourcefinch.com/v1/sources/$SOURCE_ID/runs \
  -H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

CLI

The sourcefinch CLI is not on npm yet; see /docs/cli.

sourcefinch login
sourcefinch catalog get danmarks-nationalbank-krone-exchange-rates --source-json > source.json
sourcefinch sources create --file source.json
sourcefinch runs create $SOURCE_ID --wait
sourcefinch records $SOURCE_ID

MCP

Remote MCP server with OAuth; see /docs/mcp.

claude mcp add --transport http sourcefinch https://sourcefinch.com/mcp

# then ask your agent:
"Use SourceFinch to monitor Danish krone exchange rates, last five business days: get_catalog_source danmarks-nationalbank-krone-exchange-rates,
then create_source with its create_source_args (dry run first), then run_source."

source.json

The request body the API and CLI examples send.

{
  "name": "Danish krone exchange rates, last five business days",
  "url": "https://www.nationalbanken.dk/api/currencyratesxmlhistory?lang=en",
  "recipe": {
    "mode": "http",
    "format": "xml",
    "items": "Cube[time]",
    "fields": {
      "aud": "Cube[currency=\"AUD\"]@rate",
      "brl": "Cube[currency=\"BRL\"]@rate",
      "cad": "Cube[currency=\"CAD\"]@rate",
      "chf": "Cube[currency=\"CHF\"]@rate",
      "cny": "Cube[currency=\"CNY\"]@rate",
      "czk": "Cube[currency=\"CZK\"]@rate",
      "eur": "Cube[currency=\"EUR\"]@rate",
      "gbp": "Cube[currency=\"GBP\"]@rate",
      "hkd": "Cube[currency=\"HKD\"]@rate",
      "huf": "Cube[currency=\"HUF\"]@rate",
      "idr": "Cube[currency=\"IDR\"]@rate",
      "ils": "Cube[currency=\"ILS\"]@rate",
      "inr": "Cube[currency=\"INR\"]@rate",
      "isk": "Cube[currency=\"ISK\"]@rate",
      "jpy": "Cube[currency=\"JPY\"]@rate",
      "krw": "Cube[currency=\"KRW\"]@rate",
      "mxn": "Cube[currency=\"MXN\"]@rate",
      "myr": "Cube[currency=\"MYR\"]@rate",
      "nok": "Cube[currency=\"NOK\"]@rate",
      "nzd": "Cube[currency=\"NZD\"]@rate",
      "php": "Cube[currency=\"PHP\"]@rate",
      "pln": "Cube[currency=\"PLN\"]@rate",
      "ron": "Cube[currency=\"RON\"]@rate",
      "sek": "Cube[currency=\"SEK\"]@rate",
      "sgd": "Cube[currency=\"SGD\"]@rate",
      "thb": "Cube[currency=\"THB\"]@rate",
      "try": "Cube[currency=\"TRY\"]@rate",
      "usd": "Cube[currency=\"USD\"]@rate",
      "xdr": "Cube[currency=\"XDR\"]@rate",
      "zar": "Cube[currency=\"ZAR\"]@rate",
      "date": "@time"
    },
    "required": [
      "date"
    ],
    "types": {
      "aud": "number",
      "brl": "number",
      "cad": "number",
      "chf": "number",
      "cny": "number",
      "czk": "number",
      "eur": "number",
      "gbp": "number",
      "hkd": "number",
      "huf": "number",
      "idr": "number",
      "ils": "number",
      "inr": "number",
      "isk": "number",
      "jpy": "number",
      "krw": "number",
      "mxn": "number",
      "myr": "number",
      "nok": "number",
      "nzd": "number",
      "php": "number",
      "pln": "number",
      "ron": "number",
      "sek": "number",
      "sgd": "number",
      "thb": "number",
      "try": "number",
      "usd": "number",
      "xdr": "number",
      "zar": "number",
      "date": "date"
    }
  },
  "key_field": "date",
  "schedule": "daily",
  "rights": true,
  "catalog": {
    "slug": "danmarks-nationalbank-krone-exchange-rates",
    "version_id": "0f09d4f9-f61b-4e65-b58e-a120ae1c734d"
  }
}
Swedish krona exchange rates, latest by currency

REST API

Create an API key under Console → API & access. Reference: /docs/api.

# the Verified entry (fields, recipe, sample, terms) as JSON
curl https://sourcefinch.com/v1/catalog/riksbank-krona-exchange-rates -H "Authorization: Bearer $SOURCEFINCH_API_KEY"

# create the monitor from source.json (below)
curl -X POST https://sourcefinch.com/v1/sources \
  -H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d @source.json

# then run it now (later runs follow the schedule)
curl -X POST https://sourcefinch.com/v1/sources/$SOURCE_ID/runs \
  -H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

CLI

The sourcefinch CLI is not on npm yet; see /docs/cli.

sourcefinch login
sourcefinch catalog get riksbank-krona-exchange-rates --source-json > source.json
sourcefinch sources create --file source.json
sourcefinch runs create $SOURCE_ID --wait
sourcefinch records $SOURCE_ID

MCP

Remote MCP server with OAuth; see /docs/mcp.

claude mcp add --transport http sourcefinch https://sourcefinch.com/mcp

# then ask your agent:
"Use SourceFinch to monitor Swedish krona exchange rates, latest by currency: get_catalog_source riksbank-krona-exchange-rates,
then create_source with its create_source_args (dry run first), then run_source."

source.json

The request body the API and CLI examples send.

{
  "name": "Swedish krona exchange rates, latest by currency",
  "url": "https://api.riksbank.se/swea/v1/Observations/Latest/ByGroup/130",
  "recipe": {
    "mode": "http",
    "format": "json",
    "items": "[*]",
    "fields": {
      "date": "date",
      "value": "value",
      "series_id": "seriesId"
    },
    "required": [
      "series_id",
      "value"
    ],
    "types": {
      "date": "date",
      "value": "number"
    }
  },
  "key_field": "series_id",
  "schedule": "daily",
  "rights": true,
  "catalog": {
    "slug": "riksbank-krona-exchange-rates",
    "version_id": "de61d8c2-f7cc-456e-831f-bbfb67ee73f2"
  }
}
Czech koruna exchange rate fixing, daily

REST API

Create an API key under Console → API & access. Reference: /docs/api.

# the Verified entry (fields, recipe, sample, terms) as JSON
curl https://sourcefinch.com/v1/catalog/czech-national-bank-koruna-exchange-rates -H "Authorization: Bearer $SOURCEFINCH_API_KEY"

# create the monitor from source.json (below)
curl -X POST https://sourcefinch.com/v1/sources \
  -H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d @source.json

# then run it now (later runs follow the schedule)
curl -X POST https://sourcefinch.com/v1/sources/$SOURCE_ID/runs \
  -H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

CLI

The sourcefinch CLI is not on npm yet; see /docs/cli.

sourcefinch login
sourcefinch catalog get czech-national-bank-koruna-exchange-rates --source-json > source.json
sourcefinch sources create --file source.json
sourcefinch runs create $SOURCE_ID --wait
sourcefinch records $SOURCE_ID

MCP

Remote MCP server with OAuth; see /docs/mcp.

claude mcp add --transport http sourcefinch https://sourcefinch.com/mcp

# then ask your agent:
"Use SourceFinch to monitor Czech koruna exchange rate fixing, daily: get_catalog_source czech-national-bank-koruna-exchange-rates,
then create_source with its create_source_args (dry run first), then run_source."

source.json

The request body the API and CLI examples send.

{
  "name": "Czech koruna exchange rate fixing, daily",
  "url": "https://api.cnb.cz/cnbapi/exrates/daily?lang=EN",
  "recipe": {
    "mode": "http",
    "format": "json",
    "items": "rates[*]",
    "fields": {
      "rate": "rate",
      "amount": "amount",
      "country": "country",
      "currency": "currency",
      "valid_for": "validFor",
      "currency_code": "currencyCode",
      "fixing_number": "order"
    },
    "required": [
      "currency_code",
      "rate"
    ],
    "types": {
      "rate": "number",
      "amount": "integer",
      "valid_for": "date",
      "fixing_number": "integer"
    }
  },
  "key_field": "currency_code",
  "schedule": "daily",
  "rights": true,
  "catalog": {
    "slug": "czech-national-bank-koruna-exchange-rates",
    "version_id": "f27dd921-460c-4ea0-878e-0893ba42ccea"
  }
}
Ukrainian hryvnia exchange rates set by the National Bank of Ukraine, daily

REST API

Create an API key under Console → API & access. Reference: /docs/api.

# the Verified entry (fields, recipe, sample, terms) as JSON
curl https://sourcefinch.com/v1/catalog/national-bank-of-ukraine-hryvnia-exchange-rates -H "Authorization: Bearer $SOURCEFINCH_API_KEY"

# create the monitor from source.json (below)
curl -X POST https://sourcefinch.com/v1/sources \
  -H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d @source.json

# then run it now (later runs follow the schedule)
curl -X POST https://sourcefinch.com/v1/sources/$SOURCE_ID/runs \
  -H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

CLI

The sourcefinch CLI is not on npm yet; see /docs/cli.

sourcefinch login
sourcefinch catalog get national-bank-of-ukraine-hryvnia-exchange-rates --source-json > source.json
sourcefinch sources create --file source.json
sourcefinch runs create $SOURCE_ID --wait
sourcefinch records $SOURCE_ID

MCP

Remote MCP server with OAuth; see /docs/mcp.

claude mcp add --transport http sourcefinch https://sourcefinch.com/mcp

# then ask your agent:
"Use SourceFinch to monitor Ukrainian hryvnia exchange rates set by the National Bank of Ukraine, daily: get_catalog_source national-bank-of-ukraine-hryvnia-exchange-rates,
then create_source with its create_source_args (dry run first), then run_source."

source.json

The request body the API and CLI examples send.

{
  "name": "Ukrainian hryvnia exchange rates set by the National Bank of Ukraine, daily",
  "url": "https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?json",
  "recipe": {
    "mode": "http",
    "format": "json",
    "items": "[*]",
    "fields": {
      "rate": "rate",
      "name_uk": "txt",
      "special": "special",
      "numeric_code": "r030",
      "currency_code": "cc",
      "exchange_date": "exchangedate"
    },
    "required": [
      "currency_code",
      "rate"
    ],
    "types": {
      "rate": "number",
      "numeric_code": "integer"
    }
  },
  "key_field": "currency_code",
  "schedule": "daily",
  "rights": true,
  "catalog": {
    "slug": "national-bank-of-ukraine-hryvnia-exchange-rates",
    "version_id": "3e17a184-cbb7-4f91-ae8b-284ac969d490"
  }
}
U.S. Treasury reporting rate of exchange for the euro, quarterly

REST API

Create an API key under Console → API & access. Reference: /docs/api.

# the Verified entry (fields, recipe, sample, terms) as JSON
curl https://sourcefinch.com/v1/catalog/treasury-reporting-rates-of-exchange-euro -H "Authorization: Bearer $SOURCEFINCH_API_KEY"

# create the monitor from source.json (below)
curl -X POST https://sourcefinch.com/v1/sources \
  -H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d @source.json

# then run it now (later runs follow the schedule)
curl -X POST https://sourcefinch.com/v1/sources/$SOURCE_ID/runs \
  -H "Authorization: Bearer $SOURCEFINCH_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

CLI

The sourcefinch CLI is not on npm yet; see /docs/cli.

sourcefinch login
sourcefinch catalog get treasury-reporting-rates-of-exchange-euro --source-json > source.json
sourcefinch sources create --file source.json
sourcefinch runs create $SOURCE_ID --wait
sourcefinch records $SOURCE_ID

MCP

Remote MCP server with OAuth; see /docs/mcp.

claude mcp add --transport http sourcefinch https://sourcefinch.com/mcp

# then ask your agent:
"Use SourceFinch to monitor U.S. Treasury reporting rate of exchange for the euro, quarterly: get_catalog_source treasury-reporting-rates-of-exchange-euro,
then create_source with its create_source_args (dry run first), then run_source."

source.json

The request body the API and CLI examples send.

{
  "name": "U.S. Treasury reporting rate of exchange for the euro, quarterly",
  "url": "https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v1/accounting/od/rates_of_exchange?filter=country_currency_desc:eq:Euro%20Zone-Euro&sort=-effective_date&page%5Bsize%5D=40",
  "recipe": {
    "mode": "http",
    "format": "json",
    "items": "data[*]",
    "fields": {
      "country": "country",
      "currency": "currency",
      "record_date": "record_date",
      "exchange_rate": "exchange_rate",
      "effective_date": "effective_date",
      "country_currency": "country_currency_desc"
    },
    "required": [
      "effective_date",
      "exchange_rate"
    ],
    "types": {
      "record_date": "date",
      "exchange_rate": "number",
      "effective_date": "date"
    }
  },
  "key_field": "effective_date",
  "schedule": "daily",
  "rights": true,
  "catalog": {
    "slug": "treasury-reporting-rates-of-exchange-euro",
    "version_id": "5c12b95e-5d19-4d25-81a7-300e74a2cf3e"
  }
}

Alerts and evidence

Most of these rates change every business day, so a daily digest is quieter than an email per change. For a rates table, a webhook in Snapshot mode sends all current records after each successful run; CSV, JSON and XLSX exports carry the same records.

Every run keeps the publisher's exact response with its SHA-256 hash and a signed manifest, and every value points back to where it was read. How that works is in the docs:

Limitations

  • These are reference and indicative rates published for information. The ECB strongly discourages using its rates for transactions, and Danmarks Nationalbank says its rates are indicative and not for transaction purposes. Nothing here is trading advice.
  • Units differ by publisher: per 1 euro (ECB), per 100 units (Danmarks Nationalbank), per unit or per 100 units by series (Riksbank), per the stated amount (Czech National Bank), per unit (National Bank of Ukraine) and euros per U.S. dollar (Treasury). Convert before comparing figures across publishers.
  • Since 27 November 2023 the Riksbank's rates are the ECB's reference rates converted to kronor, so the two are not independent observations.
  • A run after 3:30 p.m. Kyiv time records the National Bank of Ukraine's rate for the next business day. Its exchange_date is text as published (DD.MM.YYYY), not a typed date.
  • A currency the ECB stops quoting shows as null; the ECB suspended its rouble rate in March 2022.
  • Each run reads a window: the ECB's 90-day file, Danmarks Nationalbank's last five business days and the Treasury's 40 most recent effective dates. A day leaving the window is not a deletion; the monitor's history keeps it.

Usage rights, terms posture and reliability for each source are on its source page. They are our documented understanding of each publisher's stated terms, not legal advice.

Related

SourceFinch is independent and is not affiliated with or endorsed by European Central Bank, Danmarks Nationalbank, Sveriges Riksbank, Czech National Bank, National Bank of Ukraine, Bureau of the Fiscal Service (U.S. Department of the Treasury). This guide describes their public data as SourceFinch acquires it. It is not legal, medical or financial advice.