Currency Converter & Exchange Rates API

Real-time exchange rates for 170+ currencies (fiat, crypto, metals). Compare rates across 8 platforms including Wise, Revolut, PayPal. Historical data up to 1 year.

What can you do?
Real-time exchange rates

170+ fiat, crypto & precious metal currencies in a single call.

Platform rate comparison

Compare Wise, Revolut, PayPal, XE & 5 more to find the best deal.

Historical data up to 1 year

Daily snapshots for trend analysis, charts & backtesting.

99.9 % Uptime
5ms Response
20 req/s
0.001 Credits / request

List Currencies


POST https://api.yeb.to/v1/currency/currencies
ParameterTypeReq.Description
api_key string yes Your API key

Example

curl -X POST https://api.yeb.to/v1/currency/currencies \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_KEY"
}'

Response Example

{
  "currencies": [
    { "code": "EUR", "name": "Euro", "symbol": "\u20ac", "decimals": 2, "type": "fiat" },
    { "code": "USD", "name": "US Dollar", "symbol": "$", "decimals": 2, "type": "fiat" },
    { "code": "BTC", "name": "Bitcoin", "symbol": "\u20bf", "decimals": 8, "type": "crypto" },
    { "code": "XAU", "name": "Gold (Troy Ounce)", "symbol": "XAU", "decimals": 2, "type": "metal" }
  ],
  "total": 182,
  "top_fiat": ["USD","EUR","GBP","BGN","JPY","AUD","CAD","CHF"],
  "top_crypto": ["BTC","ETH","SOL","ADA","BNB","USDT","USDC","XRP","DOGE","DOT"],
  "metals": ["XAU","XAG","XPT","XPD"]
}
{"error":"Invalid API key","code":401}

Response Codes

CodeDescription
200 SuccessRequest processed OK.
400 Bad RequestInput validation failed.
401 UnauthorizedMissing / wrong API key.
403 ForbiddenKey inactive or not allowed.
429 Rate LimitToo many requests.
500 Server ErrorUnexpected failure.

List Currencies

currency/currencies 0.0010 credits

Parameters

API Key
body · string · required

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Get Exchange Rates


POST https://api.yeb.to/v1/currency/rates
ParameterTypeReq.Description
api_key string yes Your API key
from string opt Source currency code (use with to for single pair)
to string opt Target currency code (use with from for single pair)
pairs array opt Array of pairs: [{"from":"EUR","to":"BGN"}, ...] (max 20)

Example

curl -X POST https://api.yeb.to/v1/currency/rates \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_KEY",
  "from": "EUR",
  "to": "BGN"
}'

Response Example

{
  "rates": [
    {
      "from": "EUR",
      "to": "BGN",
      "rate": 1.955800,
      "source": "fawazahmed0",
      "fetched_at": "2026-02-20T14:30:00Z"
    }
  ]
}
{"error":"pairs array or from/to parameters are required","code":422}

Response Codes

CodeDescription
200 SuccessRequest processed OK.
400 Bad RequestInput validation failed.
401 UnauthorizedMissing / wrong API key.
403 ForbiddenKey inactive or not allowed.
429 Rate LimitToo many requests.
500 Server ErrorUnexpected failure.

Get Exchange Rates

currency/rates 0.0050 credits

Parameters

API Key
body · string · required
From Currency
body · string
To Currency
body · string
Pairs
body · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Convert Currency


POST https://api.yeb.to/v1/currency/convert
ParameterTypeReq.Description
api_key string yes Your API key
from string yes Source currency code (e.g. EUR, USD, BTC)
to string yes Target currency code (e.g. BGN, GBP, ETH)
amount number yes Amount to convert (0.01 – 10,000,000)
include_platforms bool opt Include platform rate comparison (default: true)

Example

curl -X POST https://api.yeb.to/v1/currency/convert \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_KEY",
  "from": "EUR",
  "to": "BGN",
  "amount": 1000,
  "include_platforms": true
}'

Response Example

{
  "from": "EUR",
  "to": "BGN",
  "amount": 1000,
  "mid_market": {
    "rate": 1.9558,
    "result": 1955.80
  },
  "platforms": {
    "wise":    { "rate": 1.9460, "result": 1946.03, "fee": 5.93, "total_cost": 15.70, "markup": "0.50%" },
    "revolut": { "rate": 1.9509, "result": 1950.91, "fee": 0,    "total_cost": 4.89,  "markup": "0.25%" },
    "paypal":  { "rate": 1.8776, "result": 1877.57, "fee": 3.99, "total_cost": 82.22, "markup": "4.00%" }
  },
  "sources": { "primary": "fawazahmed0" },
  "fetched_at": "2026-02-20T14:30:00Z"
}
{"error":"Exchange rate not available for xxx/yyy","code":404}

Response Codes

CodeDescription
200 SuccessRequest processed OK.
400 Bad RequestInput validation failed.
401 UnauthorizedMissing / wrong API key.
403 ForbiddenKey inactive or not allowed.
429 Rate LimitToo many requests.
500 Server ErrorUnexpected failure.

Convert Currency

currency/convert 0.0090 credits

Parameters

API Key
body · string · required
From Currency
body · string · required
To Currency
body · string · required
Amount
body · string · required
Include Platforms
body · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

List Platforms


POST https://api.yeb.to/v1/currency/platforms
ParameterTypeReq.Description
api_key string yes Your API key

Example

curl -X POST https://api.yeb.to/v1/currency/platforms \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_KEY"
}'

Response Example

{
  "platforms": {
    "wise":       { "name": "Wise",          "markup": 0.50, "fee_pct": 0.50, "fee_flat": 0, "weekend_extra": 0 },
    "revolut":    { "name": "Revolut",       "markup": 0.25, "fee_pct": 0,    "fee_flat": 0, "weekend_extra": 0.75 },
    "paypal":     { "name": "PayPal",        "markup": 4.00, "fee_pct": 2.90, "fee_flat": 0, "weekend_extra": 0 },
    "skrill":     { "name": "Skrill",        "markup": 3.99, "fee_pct": 1.45, "fee_flat": 0, "weekend_extra": 0 },
    "western_union": { "name": "Western Union", "markup": 2.00, "fee_pct": 0, "fee_flat": 5, "weekend_extra": 0 },
    "xe":         { "name": "XE",            "markup": 0.50, "fee_pct": 0,    "fee_flat": 0, "weekend_extra": 0 },
    "remitly":    { "name": "Remitly",       "markup": 1.50, "fee_pct": 0,    "fee_flat": 0, "weekend_extra": 0 },
    "ofx":        { "name": "OFX",           "markup": 0.50, "fee_pct": 0,    "fee_flat": 0, "weekend_extra": 0 }
  }
}
{"error":"Invalid API key","code":401}

Response Codes

CodeDescription
200 SuccessRequest processed OK.
400 Bad RequestInput validation failed.
401 UnauthorizedMissing / wrong API key.
403 ForbiddenKey inactive or not allowed.
429 Rate LimitToo many requests.
500 Server ErrorUnexpected failure.

List Platforms

currency/platforms 0.0010 credits

Parameters

API Key
body · string · required

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Historical Rates


POST https://api.yeb.to/v1/currency/historical
ParameterTypeReq.Description
api_key string yes Your API key
from string yes Source currency code
to string yes Target currency code
start_date string opt Start date in YYYY-MM-DD (default: 30 days ago)
end_date string opt End date in YYYY-MM-DD (default: today)

Example

curl -X POST https://api.yeb.to/v1/currency/historical \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_KEY",
  "from": "EUR",
  "to": "BGN",
  "start_date": "2026-01-01",
  "end_date": "2026-01-31"
}'

Response Example

{
  "from": "EUR",
  "to": "BGN",
  "start_date": "2026-01-01",
  "end_date": "2026-01-31",
  "rates": [
    { "date": "2026-01-01", "rate": 1.955800 },
    { "date": "2026-01-02", "rate": 1.955800 },
    { "date": "2026-01-03", "rate": 1.955600 }
  ],
  "count": 31
}
{"error":"Date range must not exceed 365 days","code":422}

Response Codes

CodeDescription
200 SuccessRequest processed OK.
400 Bad RequestInput validation failed.
401 UnauthorizedMissing / wrong API key.
403 ForbiddenKey inactive or not allowed.
429 Rate LimitToo many requests.
500 Server ErrorUnexpected failure.

Historical Rates

currency/historical 0.0200 credits

Parameters

API Key
body · string · required
From Currency
body · string · required
To Currency
body · string · required
Start Date
body · string
End Date
body · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Currency Converter & Exchange Rates API — Practical Guide

A hands-on guide to the Currency API: real-time exchange rates from multiple verified sources, platform fee comparison (Wise, Revolut, PayPal & more), historical rate data, and how to integrate it all into your application.

#What the Currency API does

The Currency API provides 5 endpoints for production-ready currency data: list 170+ currencies (fiat, crypto & metals), fetch live exchange rates from multiple verified sources, convert amounts with platform fee comparison, browse platform markups, and query historical daily rates for up to one year.

#Endpoints at a glance

Endpoint What it does Credits
currencies List all supported currencies with code, name, symbol, type (fiat/crypto/metal) 0.001
rates Get live exchange rates for one or more currency pairs (max 20) 0.005
convert Convert an amount & compare what you’d receive on 8 platforms 0.009
platforms List platforms with their markup percentages and fee structures 0.001
historical Daily historical rates for a pair (up to 365 days) 0.02

#Convert & Platform Comparison

The convert endpoint is the most popular. It returns the mid-market rate plus what you’d actually receive on each platform after their markup and fees.

POST
curl -X POST https://api.yeb.to/v1/currency/convert \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "YOUR_KEY",
    "from": "EUR",
    "to": "BGN",
    "amount": 1000,
    "include_platforms": true
  }'

The response includes the mid-market conversion and a breakdown per platform:

  • rate — the effective rate after platform markup
  • result — what you actually receive
  • fee — the platform’s transfer fee
  • total_cost — total hidden cost vs mid-market (markup + fee)
  • markup — the platform’s markup percentage

#Supported platforms

We compare rates across 8 popular money transfer platforms:

PlatformMarkupFeeNotes
Wise0.50%VariableTransparent mid-market based
Revolut0.25%None (free plan)+0.75% on weekends
XE0.50%NoneClose to mid-market
OFX0.50%NoneGood for large amounts
Remitly1.50%VariablePopular for remittances
Western Union2.00%Flat feeWide physical network
Skrill3.99%1.45%Digital wallet
PayPal4.00%2.90%Highest total cost

#Currency coverage

The API supports 170+ currencies across three categories:

  • Fiat — USD, EUR, GBP, BGN, JPY, CHF, AUD, CAD, and 150+ more
  • Crypto — BTC, ETH, SOL, ADA, BNB, USDT, USDC, XRP, DOGE, DOT
  • Precious metals — XAU (gold), XAG (silver), XPT (platinum), XPD (palladium)

Use the currencies endpoint to fetch the full list with symbols and decimal precision.

#Historical rates

The historical endpoint returns daily rate snapshots for any pair. Useful for building charts, calculating averages, or backtesting strategies.

  • Default range: last 30 days
  • Maximum range: 365 days
  • Dates in YYYY-MM-DD format

#How rates are sourced

Reliability is built in through multi-source aggregation:

  1. Primary — fawazahmed0 exchange API (CDN-backed, 200+ currencies, no rate limit, updated every 15 min)
  2. Secondary — fxratesapi.com (real-time verification every 30 min)
  3. Fallback — European Central Bank (ECB) daily reference rates
  4. Cache — last known rate if all sources are temporarily unavailable (< 24h)

If the primary and secondary sources diverge by more than 1%, the system logs a deviation warning and uses the primary rate.

#Common use cases

  • E-commerce — display prices in the visitor’s local currency
  • Fintech apps — show users how much they’d save on each platform
  • Travel apps — quick multi-currency converter
  • Accounting — historical rates for end-of-month reconciliation
  • Crypto dashboards — live BTC/ETH prices alongside fiat

Frequently Asked Questions

We aggregate rates from multiple independent sources (fawazahmed0, fxratesapi, ECB) and cross-verify them. If one source is down, the others provide fallback.

Platform markups are based on published fee structures. We apply each platform's known markup percentage to the mid-market rate. Actual rates may vary slightly depending on amount and corridor.

Yes. We support 10+ major cryptocurrencies including BTC, ETH, SOL, USDT, USDC, and more. Precious metals (XAU, XAG, XPT, XPD) are also available.

Historical rates are available for up to 365 days. Daily snapshots are taken automatically and stored for charting and analysis.

Primary rates are refreshed every 15 minutes. Secondary source verification runs every 30 minutes. Individual pair lookups are cached for 5 minutes.

Yes. Every request, even those resulting in errors, consumes credits. This is because your credits are tied to the number of requests, regardless of success or failure. If the error is clearly due to a platform problem on our end, we will restore the affected credits (no cash refunds).

Contact us at [email protected]. We take feedback seriously—if your bug report or feature request is meaningful, we can fix or improve the API quickly and grant you 50 free credits as a thank you.

It depends on the API and sometimes even on the endpoint. Some endpoints use data from external sources, which may have stricter limits. We also enforce limits to prevent abuse and keep our platform stable. Check the docs for the specific rate limit for each endpoint.

We operate on a credit system. Credits are prepaid, non-refundable units you spend on API calls and tools. Credits are consumed FIFO (oldest first) and are valid for 12 months from the purchase date. The dashboard shows each purchase date and its expiry.

Yes. All purchased credits (including fractional balances) are valid for 12 months from purchase. Unused credits automatically expire and are permanently deleted at the end of the validity period. Expired credits cannot be restored or converted to cash or other value. Transitional rule: credits bought before 22 Sep 2025 are treated as purchased on 22 Sep 2025 and expire on 22 Sep 2026 (unless an earlier expiry was stated at purchase).

Yes—within their validity window. Unused credits remain available and roll over month-to-month until they expire 12 months after purchase.

Credits are non-refundable. Only buy what you need—you can always top up later. If a platform-side error causes a failed charge, we may restore the affected credits after investigation. No cash refunds.

Prices are set in credits, not dollars. Each endpoint lists its own cost—see the “Credits / request” badge above. You’ll always know exactly what you’re spending.
← Back to APIs