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.

Ücretsiz anahtar oluşturAPI referansını oku

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+ · sunucu tarafı WebSocket istemcisi
// 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.

JSON · örnek mesaj; değerler ve zaman yalnızca gösterim amaçlıdır
{
  "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 et

Plan 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.

PlanBağlantılarBağlantı başına pariteTicari kullanım
Free15Hayır
Basic325Evet
Pro10100Evet

Kabul edilen her bağlantı aylık kotadan bir birim tüketir.

Fiyatları gör

Ticari 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.