Docs/Skills/Exchange Rate Skill

Exchange Rate Skill

Get exchange rate between two currencies

OperationalCredits 2 per callp50 162msFinance

Overview

An FX rate API for live forex rates, in one call: pass two currency codes as parameters to receive the current conversion multiplier and an ISO 8601 timestamp showing when the rate refreshed. The response covers over 170 currencies. Each response names both currencies. Paid plans also return the inverse rate for reverse conversions without a second call, and how far the pair has moved over the last day, 7 days, 30 days and year, measured from the rate's date, so a historical lookup reports the moves leading up to that day. The last 30 daily closes are stored per currency, so paid plans also get the pair's 30-day high, low, average and volatility, and history=true returns the closes themselves. On live lookups, hourly=true adds the rate for each of the last 24 hours.

Live Test Exchange Rate Skill Skill →

The tool

Once your client is connected to the VerveKit server, this appears in its tool list as ExchangeRateSkill. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.

Tool call
{
  "name": "ExchangeRateSkill",
  "arguments": {
    "currency1": "USD",
    "currency2": "EUR"
  }
}

You do not name the tool yourself; the model picks it. Asking about USD in the terms this skill covers is enough for it to reach for ExchangeRateSkill on its own — naming it explicitly also works, and is the way to force the call.

Connecting

One server URL covers every skill in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.

{
  "mcpServers": {
    "vervekit": {
      "url": "https://api.vervekit.com/v1/mcp"
    }
  }
}

Per-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.

Arguments

These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.

ArgumentTypeDescription
currency1RequiredstringThe first currency you want to get the exchange rate for
currency2RequiredstringThe second currency you want to get the exchange rate for
dateOptionalPremiumstringOptional past date (YYYY-MM-DD) to use that day's closing rates instead of live rates. History runs from 1999-01-04 for about 30 major currencies and covers every supported currency from March 2024. A day with no rates, such as a weekend or holiday, uses the last close before it.
historyOptionalPremiumbooleanInclude the pair's daily closing rate for the last 30 days
hourlyOptionalPremiumbooleanInclude the pair's rate for each of the last 24 hours (live rates only, not with date)

What the model gets back

The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.

Result
{
  "status": "ok",
  "error": null,
  "data": {
    "currency1": "USD",
    "currency2": "EUR",
    "exchangeRate": "0.895099",
    "inverseRate": "1.117195",
    "date": "2026-10-27",
    "lastUpdated": "2026-10-27T17:41:09.810Z",
    "currency1Name": "US Dollar",
    "currency2Name": "Euro",
    "change1d": 0.4467,
    "change7d": 0.5739,
    "change30d": 1.9699,
    "change1y": 4.1682,
    "high30d": 0.895099,
    "low30d": 0.878037,
    "average30d": 0.889911,
    "volatility30d": 0.2427,
    "history": [
      {
        "date": "2026-09-28",
        "rate": 0.878037
      },
      {
        "date": "2026-09-29",
        "rate": 0.880226
      },
      {
        "date": "2026-09-30",
        "rate": 0.882434
      },
      {
        "date": "2026-10-01",
        "rate": 0.883652
      },
      {
        "date": "2026-10-02",
        "rate": 0.888626
      },
      {
        "date": "2026-10-03",
        "rate": 0.888626
      },
      {
        "date": "2026-10-04",
        "rate": 0.888246
      },
      {
        "date": "2026-10-05",
        "rate": 0.894174
      },
      {
        "date": "2026-10-06",
        "rate": 0.891674
      },
      {
        "date": "2026-10-07",
        "rate": 0.890419
      },
      {
        "date": "2026-10-08",
        "rate": 0.892463
      },
      {
        "date": "2026-10-09",
        "rate": 0.889796
      },
      {
        "date": "2026-10-10",
        "rate": 0.892716
      },
      {
        "date": "2026-10-11",
        "rate": 0.892571
      },
      {
        "date": "2026-10-12",
        "rate": 0.892822
      },
      {
        "date": "2026-10-13",
        "rate": 0.894845
      },
      {
        "date": "2026-10-14",
        "rate": 0.891987
      },
      {
        "date": "2026-10-15",
        "rate": 0.890861
      },
      {
        "date": "2026-10-16",
        "rate": 0.88987
      },
      {
        "date": "2026-10-17",
        "rate": 0.889757
      },
      {
        "date": "2026-10-18",
        "rate": 0.889761
      },
      {
        "date": "2026-10-19",
        "rate": 0.890515
      },
      {
        "date": "2026-10-20",
        "rate": 0.889991
      },
      {
        "date": "2026-10-21",
        "rate": 0.890629
      },
      {
        "date": "2026-10-22",
        "rate": 0.889437
      },
      {
        "date": "2026-10-23",
        "rate": 0.891773
      },
      {
        "date": "2026-10-24",
        "rate": 0.892532
      },
      {
        "date": "2026-10-25",
        "rate": 0.892668
      },
      {
        "date": "2026-10-26",
        "rate": 0.891118
      },
      {
        "date": "2026-10-27",
        "rate": 0.895099
      }
    ],
    "hourly": [
      {
        "hour": 18,
        "rate": 0.891512,
        "timestamp": "2026-10-26T18:41:09.810Z"
      },
      {
        "hour": 19,
        "rate": 0.891173,
        "timestamp": "2026-10-26T19:41:09.810Z"
      },
      {
        "hour": 20,
        "rate": 0.8911,
        "timestamp": "2026-10-26T20:41:09.810Z"
      },
      {
        "hour": 21,
        "rate": 0.891849,
        "timestamp": "2026-10-26T21:41:09.810Z"
      },
      {
        "hour": 22,
        "rate": 0.89212,
        "timestamp": "2026-10-26T22:41:09.810Z"
      },
      {
        "hour": 23,
        "rate": 0.891692,
        "timestamp": "2026-10-26T23:41:09.810Z"
      },
      {
        "hour": 0,
        "rate": 0.891922,
        "timestamp": "2026-10-27T00:41:09.810Z"
      },
      {
        "hour": 1,
        "rate": 0.892681,
        "timestamp": "2026-10-27T01:41:09.810Z"
      },
      {
        "hour": 2,
        "rate": 0.892646,
        "timestamp": "2026-10-27T02:41:09.810Z"
      },
      {
        "hour": 3,
        "rate": 0.892287,
        "timestamp": "2026-10-27T03:41:09.810Z"
      },
      {
        "hour": 4,
        "rate": 0.892805,
        "timestamp": "2026-10-27T04:41:09.810Z"
      },
      {
        "hour": 5,
        "rate": 0.893422,
        "timestamp": "2026-10-27T05:41:09.810Z"
      },
      {
        "hour": 6,
        "rate": 0.893135,
        "timestamp": "2026-10-27T06:41:09.810Z"
      },
      {
        "hour": 7,
        "rate": 0.892984,
        "timestamp": "2026-10-27T07:41:09.810Z"
      },
      {
        "hour": 8,
        "rate": 0.8937,
        "timestamp": "2026-10-27T08:41:09.810Z"
      },
      {
        "hour": 9,
        "rate": 0.894058,
        "timestamp": "2026-10-27T09:41:09.810Z"
      },
      {
        "hour": 10,
        "rate": 0.89364,
        "timestamp": "2026-10-27T10:41:09.810Z"
      },
      {
        "hour": 11,
        "rate": 0.893781,
        "timestamp": "2026-10-27T11:41:09.810Z"
      },
      {
        "hour": 12,
        "rate": 0.894553,
        "timestamp": "2026-10-27T12:41:09.810Z"
      },
      {
        "hour": 13,
        "rate": 0.894604,
        "timestamp": "2026-10-27T13:41:09.810Z"
      },
      {
        "hour": 14,
        "rate": 0.894209,
        "timestamp": "2026-10-27T14:41:09.810Z"
      },
      {
        "hour": 15,
        "rate": 0.894651,
        "timestamp": "2026-10-27T15:41:09.810Z"
      },
      {
        "hour": 16,
        "rate": 0.895323,
        "timestamp": "2026-10-27T16:41:09.810Z"
      },
      {
        "hour": 17,
        "rate": 0.895099,
        "timestamp": "2026-10-27T17:41:09.810Z"
      }
    ]
  }
}

Response fields

Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.

FieldTypeExampleDescription
currency1stringUSDThe first currency code requested for exchange rate
currency2stringEURThe second currency code requested for exchange rate
exchangeRatestring0.895099The current exchange rate from currency1 to currency2
inverseRatePremiumstring1.117195The inverse exchange rate from currency2 to currency1
datestring2026-10-27UTC date (YYYY-MM-DD) of the rates used: the live rates' date, or the day served for a date request
lastUpdatedstring2026-10-27T17:41:09.810ZISO 8601 timestamp of when the exchange rates were last refreshed
currency1NamestringUS DollarEnglish name of the first currency (e.g. US Dollar); null for codes without one, such as BTC
currency2NamestringEuroEnglish name of the second currency (e.g. Euro); null for codes without one, such as BTC
change1dPremiumnumber0.4467Percent change in the exchange rate over the last day, from stored daily closes; null when no close is recorded for that day
change7dPremiumnumber0.5739Percent change in the exchange rate over the last 7 days, from stored daily closes; null when no close is recorded for that day
change30dPremiumnumber1.9699Percent change in the exchange rate over the last 30 days, from stored daily closes; null when no close is recorded for that day
change1yPremiumnumber4.1682Percent change in the exchange rate over the last year, from stored daily closes; null when no close is recorded for that day
high30dPremiumnumber0.895099Highest daily close over the last 30 days of the pair; null until two days are stored
low30dPremiumnumber0.878037Lowest daily close over the last 30 days of the pair; null until two days are stored
average30dPremiumnumber0.889911Mean daily close over the last 30 days of the pair; null until two days are stored
volatility30dPremiumnumber0.2427Standard deviation of the daily percent changes over the last 30 days (not annualized); null until two days are stored
historyPremiumarray[30]The pair's daily closing rates for the last 30 days, oldest first, ending with the served rate (when history=true). Dates more than 30 days back have no series, so only the requested day is returned
history.0.datePremiumstring2026-09-28UTC date of the close (YYYY-MM-DD)
history.0.ratePremiumnumber0.878037Units of currency2 per one currency1 at that close
hourlyPremiumarray[24]The pair's rate for each of the last 24 hours, oldest first (when hourly=true)
hourly.0.hourPremiumnumber18UTC hour of day (0-23) the rate was recorded in
hourly.0.ratePremiumnumber0.891512Exchange rate from currency1 to currency2 at that hour
hourly.0.timestampPremiumstring2026-10-26T18:41:09.810ZISO 8601 time the rate was recorded

Failure modes

Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.

StatusWhat it means
400 / 422The arguments did not validate. The message names the offending one.
401The OAuth session is invalid or expired — reconnect the server.
403Blocked by a key restriction or an IP allow-list. Never a bad identity.
404This skill is not part of VerveKit. Check the catalog.
429Out of credits, or a brief rate limit. The message tells them apart.

A call costs 2 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.

Supported Currencies

170+ world currencies supported including fiat currencies, cryptocurrencies, and precious metals.

CodeCurrencyRegion
AEDUAE DirhamUnited Arab Emirates
AFNAfghan AfghaniAfghanistan
ALLAlbanian LekAlbania
AMDArmenian DramArmenia
ANGNetherlands Antillean GuilderCuraçao
AOAAngolan KwanzaAngola
ARSArgentine PesoArgentina
AUDAustralian DollarAustralia
AWGAruban FlorinAruba
AZNAzerbaijani ManatAzerbaijan
BAMBosnia-Herzegovina Convertible MarkBosnia and Herzegovina
BBDBarbadian DollarBarbados

Use cases

Multi-Currency Checkout
Convert product catalog totals into a buyer's local currency at payment time so shoppers review exact prices before charging their cards.
Cross-Border Invoicing
When billing foreign clients, SaaS platforms convert base subscription fees into regional currencies to generate accurate invoices.
Travel Booking Conversion
Travel booking engines convert hotel and flight rates into the traveler's home currency so customers can compare international costs.
Remittance Payout Preview
To eliminate foreign exchange surprises, fintech apps display the converted payout amount before a user confirms an international wire.

Other ways to use Exchange Rate Skill

Set up Exchange Rate Skill on VerveKit, or reach the same source a different way. Your VerveKit account and credits work on all of them — one key, one balance.

Call it as a REST APIOne HTTPS endpoint and an x-api-key header, with SDKs for Node, Python and .NET.APIVerve →Reference →
Google Sheets or ExcelA =VERVE() formula fills a column — no script, no export, recalculates in place.VerveSheets →Reference →
Ground an agent on itA cited, machine-checkable fact your model can't produce on its own.VerveContext →Reference →

Pages that use this skill:

More in Finance:

Was this page helpful?