Currency conversion
Look up live exchange rates for cross-currency pricing
Kashier exposes a lightweight exchange-rate lookup you can use to price cross-currency amounts before creating a payment — for example, quoting a customer a price in USD while the actual charge settles in EGP.
This is a rate lookup, not a currency conversion feature
This endpoint only reads a rate. It does not convert a payment, does not change how a payment session behaves, and is not switched on or off per merchant — calling it has no effect on anything else in your account. If you are looking for customer-facing display currencies on checkout, that is a separate, separately gated product feature; ask your account manager whether it is available to you.
Public endpoint
Unlike the rest of the payments API, this endpoint is public and unauthenticated — no Authorization or api-key header is required. You can call it directly from a browser or server without a merchant secret key.
Get exchange rate
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v3/payment/exchange-rate |
| LIVE-URL | https://api.kashier.io/v3/payment/exchange-rate |
| Method | GET |
Query parameters
| Key | Description |
|---|---|
| from | Source currency code (e.g. USD). Optional — defaults to USD. Returned as base. |
| to | Target currency code (e.g. EGP). Optional — defaults to EGP. Becomes the key inside rates. |
curl --location 'https://test-api.kashier.io/v3/payment/exchange-rate?from=USD&to=EGP'Response
{
"success": true,
"timestamp": 1787654094144,
"base": "USD",
"date": "2026-08-25",
"rates": {
"EGP": 50.76884413
}
}| Field | Description |
|---|---|
success | true when a rate was resolved. |
timestamp | When the rate was produced, in milliseconds since the epoch. |
base | The source currency — echoes from. |
date | The rate's date, YYYY-MM-DD. |
rates | An object with a single key: the to currency, mapped to the rate. Multiply an amount in base by this number to get the amount in to. |
So 1 USD = 50.76884413 EGP in the example above.
This response is not in the usual Kashier envelope
Successful responses here are passed through from the upstream rate provider, so they have no status/response/messages wrapper — unlike the rest of the API. Errors are wrapped in the standard envelope. Parse the two shapes separately.
Supported currencies
from and to accept ISO 4217 codes, and the range is wide — the rate comes
from an upstream FX provider, not from a short Kashier list. EGP, USD, EUR,
GBP, SAR, AED, KWD, JPY, CAD, CHF, and AUD all resolve, and so do
many others. An unrecognised code is rejected rather than silently defaulted (see
Errors).
A rate you can look up is not a currency you can charge in
This endpoint quoting USD → JPY does not mean Kashier can take a payment in
JPY. Payment sessions accept EGP, USD, GBP, and EUR only — see
create payment session.
Use this endpoint to price or display a cross-currency amount; charge in a
currency your account actually supports.
Errors
An unknown to currency returns 404:
{
"error": { "cause": "Invalid Data" },
"messages": {
"en": "The Exchange Rate Service is temporarily unavailable. Please try again.",
"ar": "حدث خطأ ما"
},
"status": "FAILURE"
}An unknown from currency, or an upstream outage, returns 503:
{
"error": { "cause": "Service unavailable" },
"messages": {
"en": "Exchange rate is temporarily unavailable. Please try again later",
"ar": "سعر الصرف غير متاح مؤقتًا. يرجى المحاولة مرة أخرى لاحقًا"
},
"status": "FAILURE"
}Note that the 404 message says "temporarily unavailable" even though the cause is an invalid currency code — branch on the status code and error.cause, not on the message text.