Convert Exchange Rates
On this page, we’ll dive into the convert exchange rates endpoint you can use to directly convert a value to another currency's value.
The convert endpoint is not available on the free plan — it is included in all paid plans (>= small). On plans without it, the API responds with a 403: "You are not allowed to use the convert endpoint, please upgrade your plan".
Conversions at a moment of the day
The datetime parameter needs a plan with intraday updates. On a plan with daily updates, the API responds with a 403: "You are not allowed to use the datetime parameter, please upgrade your plan".
Convert Exchange Rates
Returns calculated values for today or any given date for all currencies.
Required attributes
- Name
value- Type
- number
- Description
The value you want to convert. Must be greater than 0 Or send
valuesinstead, see several amounts
Optional attributes
- Name
values- Type
- string
- Description
Up to 100 comma separated values to convert in one request (9.99,24.50,100), each greater than 0, see several amounts Not together with
value
- Name
date- Type
- string
- Description
Date to convert against historical rates (format: 2021-12-31) Must be at least one day in the past; omit for the latest rates
- Name
datetime- Type
- string
- Description
Convert at this moment (ISO8601 Datetime, e.g.
2026-09-30T10:07:30Z), see conversions at a moment Needs a plan with intraday updates; not together withdate
- Name
base_currency- Type
- string
- Description
The base currency to which all results are behaving relative to By default all values are based on USD
- Name
currencies- Type
- string
- Description
A list of comma separated currency codes which you want to get (EUR,USD,CAD) By default all available currencies will be shown
- Name
type- Type
- string
- Description
The type of currency you want to get (fiat, metal or crypto) By default all types will be shown
- Name
round_step- Type
- number
- Description
Adds
rounded: every converted value rounded to a multiple of this step (e.g.0.05,1,10), see shop prices Not together withprice_ending
- Name
price_ending- Type
- number
- Description
Adds
rounded: every converted value rounded to a price with this ending (0up to below1, e.g.0.99), see shop prices
- Name
round_mode- Type
- string
- Description
How
round_stepandprice_endinground:nearest(default),upordown
- Name
locale- Type
- string
- Description
Adds
formatted: every converted value as text in this locale (e.g.de_AT,en-US), see shop prices
- Name
shape- Type
- string
- Description
defaultorcompact. Withcompactevery converted value is a plain number ("EUR": 11.021472) instead of acode/valueobject Not together withround_step,price_endingorlocale
- Name
precision- Type
- integer
- Description
Round every converted value to this many decimals (
0to10), e.g.2for amounts of money
- Name
format- Type
- string
- Description
json(default),csvorxlsx. The CSV has one row per currency:datetime,base_currency,currency,valueWithvaluesanamountcolumn followsbase_currency; rounding andlocaleadd the columnsroundedandformattedxlsxgives the same table as an Excel workbook, see Excel downloads
Response Properties
The response structure is equal to the response from the /latest endpoint, but every value is already multiplied by the value you sent — no manual math needed. meta also holds the value you sent and, when you sent one, the date.
Amounts, rounded to cents
curl -G https://api.currencyapi.com/v3/convert \
-d value=12 \
-d currencies=EUR,GBP \
-d shape=compact \
-d precision=2 \
-H "apikey: YOUR-API-KEY"
Response
{
"meta": {
"last_updated_at": "2023-06-23T10:15:59Z",
"base_currency": "USD",
"value": 12
},
"data": {
"EUR": 11.02,
"GBP": 9.43
}
}
Several amounts in one request
Send values instead of value to convert up to 100 amounts at once, for example every price of a product list. data is then a list with one entry per amount, in the order you sent them: the value and its converted currencies. meta.values replaces meta.value. The request costs one request of your quota, however many amounts it holds; values[]=9.99&values[]=24.50 is accepted as well.
Two amounts
curl -G https://api.currencyapi.com/v3/convert \
-d values=10,2.5 \
-d currencies=EUR \
-d shape=compact \
-H "apikey: YOUR-API-KEY"
Response
{
"meta": {
"last_updated_at": "2026-09-29T23:59:59Z",
"base_currency": "USD",
"values": [10, 2.5]
},
"data": [
{
"value": 10,
"currencies": {
"EUR": 9
}
},
{
"value": 2.5,
"currencies": {
"EUR": 2.25
}
}
]
}
With format=csv every row carries its amount after base_currency:
Response (text/csv)
datetime,base_currency,amount,currency,value
2026-09-29T23:59:59Z,USD,10,EUR,9
2026-09-29T23:59:59Z,USD,2.5,EUR,2.25
Conversions at a moment of the day
With datetime the value is converted at the rate of the minute, quarter hour or hour the moment falls in, exactly as /rate finds it: minutes and quarter hours for the last 7 days, hours for the last 3 months, at the finest interval your plan updates at. meta.last_updated_at tells you which point was used. Moments further back return a 422; use date for those days instead.
100 USD at 10:07:30
curl -G https://api.currencyapi.com/v3/convert \
-d value=100 \
-d currencies=EUR \
-d datetime=2026-09-30T10:07:30Z \
-H "apikey: YOUR-API-KEY"
Response (plan with minute updates)
{
"meta": {
"last_updated_at": "2026-09-30T10:07:59Z",
"base_currency": "USD",
"value": 100
},
"data": {
"EUR": {
"code": "EUR",
"value": 95
}
}
}
Shop prices: rounding and formatting
Converted prices rarely look like prices. Two options turn them into amounts you can show in a shop, while value always stays the exact conversion:
- Name
round_step- Type
- Description
Adds
rounded, the value rounded to a multiple of the step:0.05for 5-cent steps,1for whole amounts,10for tens. Must be greater than 0
- Name
price_ending- Type
- Description
Adds
rounded, the value rounded to a price with this ending:0.99turns 10.97 into 10.99,0.95gives 4.95, 9.95, ... Must be at least 0 and below 1. Not together withround_step
- Name
round_mode- Type
- Description
nearest(default) picks the closest candidate,upnever goes below the exact value,downnever above it
- Name
locale- Type
- Description
Adds
formatted, the amount as text in an ICU locale such asde_AT,en-USorfr_CH, with the currency’s symbol and its own decimal places (at most 8). With rounding, the rounded price is formatted; a whole-numberround_stepshows no decimals. An unknown locale returns a422
Rounding and locale work with the default shape and with CSV, which then gets the columns rounded and formatted (in that order), but not with shape=compact (422). The text in formatted uses the spaces the locale prescribes, e.g. a non-breaking space between symbol and amount for de_AT.
A price in euros, ending in .99
curl -G https://api.currencyapi.com/v3/convert \
-d value=1371.11 \
-d currencies=EUR \
-d price_ending=0.99 \
-d locale=de_AT \
-H "apikey: YOUR-API-KEY"
Response
{
"meta": {
"last_updated_at": "2026-09-29T23:59:59Z",
"base_currency": "USD",
"value": 1371.11
},
"data": {
"EUR": {
"code": "EUR",
"value": 1233.999,
"rounded": 1233.99,
"formatted": "€ 1.233,99"
}
}
}
The same with locale=en-US and format=csv
datetime,base_currency,currency,value,rounded,formatted
2026-09-29T23:59:59Z,USD,EUR,1233.999,1233.99,"€1,233.99"
Request
curl -G https://api.currencyapi.com/v3/convert \
-d value=12 \
-H "apikey: YOUR-API-KEY"
Full Response
{
"meta": {
"last_updated_at": "2022-01-01T23:59:59Z",
"base_currency": "USD",
"value": 12
},
"data": {
"AED": {
"code": "AED",
"value": 44.07672
},
"AFN": {
"code": "AFN",
"value": 1101.63048
},
"ALL": {
"code": "ALL",
"value": 1298.74848
},
"AMD": {
"code": "AMD",
"value": 5764.99908
},
"...": "180+ more currencies"
}
}