wise-api

star 1.6k

Use when querying Wise for exchange rates (real-time or historical), validating Frankfurter rates against Wise mid-market, debugging rate discrepancies, or when the user mentions Wise, sanity check, or rate comparison.

lineofflight By lineofflight schedule Updated 5/6/2026

name: wise-api description: Use when querying Wise for exchange rates (real-time or historical), validating Frankfurter rates against Wise mid-market, debugging rate discrepancies, or when the user mentions Wise, sanity check, or rate comparison.

Wise Exchange Rate API

Query real-time and historical mid-market rates from Wise for troubleshooting and data validation.

Endpoints

Base: https://api.wise.com/v1/rates

Current rates

# Single pair
curl -s -H "Authorization: Bearer $WISE_API_KEY" \
  'https://api.wise.com/v1/rates?source=EUR&target=USD' | jq

# All targets for a source (omit target entirely)
curl -s -H "Authorization: Bearer $WISE_API_KEY" \
  'https://api.wise.com/v1/rates?source=EUR' | jq

target only accepts a single currency. Comma-separated lists (target=USD,GBP,JPY) return 400 Bad Request. For multiple pairs from the same source, omit target to get all ~163 currencies in one call and filter the response locally. Loop per-pair only as a last resort.

Historical rate at a specific time

curl -s -H "Authorization: Bearer $WISE_API_KEY" \
  'https://api.wise.com/v1/rates?source=EUR&target=USD&time=2025-06-15T12:00:00' | jq

Historical rate series

curl -s -H "Authorization: Bearer $WISE_API_KEY" \
  'https://api.wise.com/v1/rates?source=EUR&target=USD&from=2025-06-01&to=2025-06-30&group=day' | jq

Parameters

Param Description Example
source Source currency (required) EUR
target Single target currency (omit for all) USD
time Single historical timestamp (ISO 8601) 2025-06-15T12:00:00
from Period start (date or timestamp) 2025-06-01
to Period end (date or timestamp, tz offset ok) 2025-06-30T23:59:59+0100
group Grouping interval for series day, hour, minute

Response

[
  {
    "rate": 1.08234,
    "source": "EUR",
    "target": "USD",
    "time": "2025-06-15T12:00:00+0000"
  }
]

Always returns an array. Historical series returns one entry per group interval.

Rate limit

500 requests/minute. Plenty for ad-hoc troubleshooting.

Comparing with Frankfurter

# Frankfurter blended (multi-target OK here)
curl -s 'http://localhost:8080/v2/rates?base=EUR&quotes=USD,GBP,JPY' | jq

# Wise current: one call for all targets, filter locally
curl -s -H "Authorization: Bearer $WISE_API_KEY" \
  'https://api.wise.com/v1/rates?source=EUR' \
  | jq '.[] | select(.target | IN("USD","GBP","JPY"))'

Deviation: abs(frankfurter - wise) / wise * 100

Deviation Assessment
< 0.1% Excellent
0.1-0.5% Acceptable (institutional vs real-time spread)
> 0.5% Investigate — stale data or provider outlier
> 1.0% Likely data issue — check individual provider rates

Currency support

Not all currencies work as source. Exotic currencies (MMK, NPR, KGS, etc.) often return 400 Bad Request when used as source. Always use a major currency (EUR, USD, GBP) as source and put the exotic currency in target.

# WRONG — will 400:
curl -s -H "Authorization: Bearer $WISE_API_KEY" \
  'https://api.wise.com/v1/rates?source=MMK&target=USD'

# RIGHT:
curl -s -H "Authorization: Bearer $WISE_API_KEY" \
  'https://api.wise.com/v1/rates?source=USD&target=MMK'

Notes

  • Wise rates are real-time; Frankfurter rates are daily institutional snapshots. Some spread is normal.
  • For historical comparison, use time param with the date you're checking, not from/to.
  • This is for internal validation only, Wise is NOT a Frankfurter provider.
  • API docs: https://docs.wise.com/api-reference/rate
Install via CLI
npx skills add https://github.com/lineofflight/frankfurter --skill wise-api
Repository Details
star Stars 1,607
call_split Forks 159
navigation Branch main
article Path SKILL.md
More from Creator
lineofflight
lineofflight Explore all skills →