WebSocket döviz kuru API’si
Desteklenen paritelere abone olun ve kalıcı bağlantı üzerinden güncellemeleri alın. API anahtarınızı sunucuda tutun.
Bağlantı başlatma
wss://api.exchangerate.dev/v1/stream adresine bağlanın, 10 saniye içinde auth gönderin ve authenticated sonrasında subscribe gönderin.
Bağlantı örneği
Bu sunucu tarafı akış bir anahtarı doğrular ve USD/EUR ile USD/JPY’ye abone olur.
// Node.js 22+ · run on your server · set EXCHANGERATE_API_KEY in the environment
const key = process.env.EXCHANGERATE_API_KEY;
if (!key) throw new Error("EXCHANGERATE_API_KEY is required");
let retries = 0;
let stopped = false;
function connect() {
const ws = new WebSocket("wss://api.exchangerate.dev/v1/stream");
ws.addEventListener("open", () => {
ws.send(JSON.stringify({ action: "auth", api_key: key }));
});
ws.addEventListener("message", ({ data }) => {
const frame = JSON.parse(String(data));
if (frame.type === "authenticated") {
retries = 0;
ws.send(JSON.stringify({ action: "subscribe", base: "USD", symbols: ["EUR", "JPY"] }));
} else if (frame.type === "snapshot" || frame.type === "update") {
if (frame.stale) return; // Keep the observation time; don't treat it as a fresh tick.
console.log(frame.base, frame.symbol, frame.rate, frame.effective_at);
} else if (frame.type === "state") {
console.log(frame.base, frame.symbol, frame.state); // stale or unavailable
} else if (frame.type === "error") {
console.error(frame.code, frame.message);
if (["invalid_api_key", "quota_exceeded", "connection_limit_exceeded", "subscription_limit_exceeded"].includes(frame.code)) {
stopped = true;
ws.close();
}
}
});
ws.addEventListener("close", () => {
if (stopped) return;
const delay = Math.min(30_000, 1_000 * 2 ** Math.min(retries++, 5));
setTimeout(connect, delay + Math.random() * 250);
});
}
connect();WebSocket bağlantıları kimlik doğrulaması gerektirir.
Her mesajı okuyun
Mesajda parite, kur, gözlem zamanı ve güncellik durumu bulunur. unavailable ve stale durumlarını açıkça işleyin.
{
"type": "update",
"base": "USD",
"symbol": "JPY",
"rate": "154.792",
"effective_at": "2026-09-15T02:59:44Z",
"source": "live",
"source_type": "market",
"market_session": "open",
"derived": false,
"stale": false
}Kapsam
Yalnızca güncel kapsam tablosunda bulunan paritelere abone olabilirsiniz. Çaprazlar her iki bacak için güncel gözlem gerektirir.
AUD, CAD, CHF, EUR, GBP, JPY, MXN, NOK, NZD, PLN, SEK, SGD, USD, ZAR · 182 Desteklenen pariteler
Güncellemeler gösterge niteliğinde gözlemlerdir. Her mesajdaki durumu ve gözlem zamanını kontrol edin.
Güncel kapsamı kontrol etPlan limitleri
Bağlantı sayısı ve bağlantı başına parite sayısı plana bağlıdır. Kabul edilen her bağlantı aylık kotadan bir birim tüketir.
| Plan | Bağlantılar | Bağlantı başına parite | Ticari kullanım |
|---|---|---|---|
| Free | 1 | 5 | Hayır |
| Basic | 3 | 25 | Evet |
| Pro | 10 | 100 | Evet |
Kabul edilen her bağlantı aylık kotadan bir birim tüketir.
Fiyatları görTicari kullanım
Akışa bağlı bir ürünü dağıtmadan önce güncel planı ve ticari kullanım koşullarını inceleyin.
Güvenli yeniden bağlanma
Bağlantı kesilince yeniden bağlanmadan önce bekleyin, tekrar kimlik doğrulayın, authenticated mesajını bekleyin ve yeniden abone olun. Anahtarı URL’ye veya herkese açık JavaScript’e koymayın.
Eksik güncellemeler eksik kalır; akış değer uydurmaz.
Anonim bağlanabilir miyim?
Hayır. WebSocket bağlantıları API anahtarı gerektirir. Anonim deneme desteklenen REST uç noktalarıyla yapılabilir.
Her döviz paritesi yayınlanıyor mu?
Hayır. WebSocket kapsamı pariteye özeldir. Kapsam tablosunu kontrol edin ve desteklenmeyen abonelikleri açıkça yönetin.