API อัตราแลกเปลี่ยนผ่าน WebSocket

สมัครรับคู่เงินที่รองรับและรับการอัปเดตผ่านการเชื่อมต่อแบบต่อเนื่อง เก็บ API key ไว้บนเซิร์ฟเวอร์

สร้างคีย์ฟรีอ่านเอกสารอ้างอิง API

เริ่มการเชื่อมต่อ

เชื่อมต่อ wss://api.exchangerate.dev/v1/stream ส่ง auth ภายใน 10 วินาที แล้วส่ง subscribe หลังได้รับ authenticated

ตัวอย่างการเชื่อมต่อ

ลำดับการทำงานฝั่งเซิร์ฟเวอร์นี้ยืนยัน key และสมัครรับ USD/EUR กับ USD/JPY

Node.js 22+ · ไคลเอนต์ WebSocket ฝั่งเซิร์ฟเวอร์
// 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 ต้องยืนยันตัวตน

อ่านแต่ละข้อความ

ข้อความมีคู่เงิน อัตรา เวลาเก็บข้อมูล และสถานะความใหม่ ให้ถือ unavailable และ stale เป็นสถานะที่ชัดเจน

JSON · ตัวอย่างข้อความ; ค่าและเวลาใช้เพื่อประกอบคำอธิบาย
{
  "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
}

ความครอบคลุม

สมัครรับได้เฉพาะคู่เงินในตารางความครอบคลุมปัจจุบัน คู่ไขว้ต้องมีข้อมูลล่าสุดของทั้งสองขา

AUD, CAD, CHF, EUR, GBP, JPY, MXN, NOK, NZD, PLN, SEK, SGD, USD, ZAR · 182 คู่เงินที่รองรับ

การอัปเดตเป็นข้อมูลสังเกตการณ์เชิงบ่งชี้ โปรดตรวจสอบสถานะและเวลาสังเกตในแต่ละข้อความ

ดูความครอบคลุมปัจจุบัน

ขีดจำกัดแพ็กเกจ

จำนวนการเชื่อมต่อและคู่เงินต่อการเชื่อมต่อขึ้นอยู่กับแพ็กเกจ การเชื่อมต่อที่ได้รับอนุมัติแต่ละครั้งใช้โควตรายเดือนหนึ่งหน่วย

แพ็กเกจการเชื่อมต่อคู่ต่อการเชื่อมต่อการใช้งานเชิงพาณิชย์
Free15ไม่
Basic325ใช่
Pro10100ใช่

การเชื่อมต่อที่ได้รับอนุมัติแต่ละครั้งใช้โควตรายเดือนหนึ่งหน่วย

ดูราคา

การใช้งานเชิงพาณิชย์

ตรวจสอบแพ็กเกจและเงื่อนไขการใช้งานเชิงพาณิชย์ปัจจุบันก่อนเผยแพร่ผลิตภัณฑ์ที่พึ่งพาสตรีมนี้

เชื่อมต่อใหม่อย่างปลอดภัย

เมื่อหลุด ให้รอก่อนเชื่อมต่อใหม่ ยืนยันตัวตนอีกครั้ง รอ authenticated แล้วสมัครรับใหม่ อย่าใส่ key ใน URL หรือ JavaScript สาธารณะ

ข้อมูลอัปเดตที่หายไปยังคงหายไป สตรีมจะไม่สร้างค่าเอง

เชื่อมต่อแบบไม่ระบุตัวตนได้ไหม

ไม่ได้ การเชื่อมต่อ WebSocket ต้องใช้ API key การทดลองแบบไม่ระบุตัวตนทำได้ผ่าน REST endpoint ที่รองรับ

สตรีมได้ทุกคู่เงินไหม

ไม่ได้ ความครอบคลุมของ WebSocket ขึ้นอยู่กับคู่เงิน โปรดดูตารางความครอบคลุมและจัดการการสมัครที่ไม่รองรับอย่างชัดเจน