Authentication และ limits
ทดลองใช้ API ข้อมูลแบบไม่ระบุตัวตนได้สูงสุด 10 คำขอต่อนาทีและ 100 คำขอต่อชั่วโมงต่อ IP คำขอที่ใช้คีย์จะนับตามโควตารายเดือนของบัญชี ราคา Free ล่าช้า 15 นาที (เฮดเดอร์ X-Price-Delay-Seconds: 900)
Authorization: Bearer YOUR_KEYX-RateLimit-Remaining: 9999X-RateLimit-Reset: 1788220800ฟิลด์ที่อธิบายความสดของข้อมูล
source บอกประเภทแหล่งข้อมูล market_session บอกสถานะตลาด และ data_updated_at บอกเวลาของข้อมูลสังเกตการณ์ที่เก่าที่สุดซึ่งมีส่วนในผลลัพธ์ ควรเก็บทั้งสาม
Endpoints
| GET /v1/latest[/{BASE}] | อัตราปัจจุบันทั้งหมดหรือกรองด้วย symbols |
| GET /v1/{YYYY-MM-DD}[/{BASE}] | ข้อมูลย้อนหลังของวันที่และสกุลฐาน |
| GET /v1/convert/{FROM}/{TO}[/{AMOUNT}] · POST /v1/convert | แปลงจำนวนเงินแบบ GET หรือ batch POST |
| GET /v1/rate/{slug} | อัตราคู่เดียวจาก slug |
| GET /v1/range | อนุกรมรายวันพร้อม pagination และ download |
| GET /v1/currencies | รายการสกุลเงินที่รองรับ ไม่มี parameters |
| GET /v1/account | บัญชี แพ็กเกจ คีย์ปัจจุบัน และการใช้งานเดือนนี้ |
| GET /v1/indices/{index_slug} · GET /v1/indices/{index_slug}/timeseries | ค่าล่าสุดของดัชนี USD และอนุกรมย้อนหลัง |
อนุกรมระหว่างวันและความครอบคลุม
/v1/timeseries รองรับ 1m, 5m, 15m, 1h, 4h และข้อมูลอ้างอิงรายวัน 1d แต่ไม่รองรับ 2h คู่ไขว้ SGD ที่ไม่มี USD ไม่รองรับ 4h ส่วน USD/SGD และทิศทางกลับกันรองรับ เริ่มเก็บข้อมูลตลาดเมื่อ 2026-09-14 ข้อมูล 1m เก็บไว้ 30 วัน ส่วนช่วงที่ใหญ่กว่าไม่มีกำหนดลบตามอายุ ระยะเวลาเก็บรักษาไม่ได้หมายความว่ามีประวัติสะสมครบแล้ว ข้อมูลระหว่างวันช่วง 1m ถึง 1h ครอบคลุม 221 คู่ที่ไม่ซ้ำกัน คือคู่ USD 143 คู่และคู่ไขว้ 78 คู่
คู่ไขว้ในประวัติต้องใช้ข้อมูลปิดจริงในช่วง UTC เดียวกัน โดยเวลาต่างกันไม่เกิน 5 วินาที effective_at ใช้เวลาเก่ากว่าของสองข้อมูล ไม่เติมช่องว่าง และช่วงที่ยังไม่ปิดอาจเปลี่ยนได้ 1d ใช้ข้อมูลอ้างอิงรายวันของทุกสกุลเงินในรายการ ตารางนับแต่ละคู่ครั้งเดียวและรองรับทั้งสองทิศทาง
| interval | คู่ที่ไม่ซ้ำกัน |
|---|---|
1m | 221 |
5m | 221 |
15m | 221 |
1h | 221 |
4h | 209 |
1d | 10296 |
curl "https://api.exchangerate.dev/v1/timeseries?base=EUR&symbols=JPY&interval=15m&from=2026-09-14T12:00:00Z&to=2026-09-14T13:00:00Z" \ -H "Authorization: Bearer YOUR_API_KEY"ช่วงที่รองรับแต่ไม่มีข้อมูลจะคืน HTTP 200 พร้อม data: [], has_more: false และ next_cursor: null ช่วงเวลาที่ไม่รู้จักคืน unsupported_interval ส่วนคู่ที่ไม่รองรับคืน unsupported_pair_interval และ rejected_pairs (HTTP 400) คำขอที่ผสมคู่ที่รองรับกับไม่รองรับจะถูกปฏิเสธทั้งหมด
รายละเอียดความครอบคลุมและขีดจำกัด
WebSocket แบบสด
เชื่อมต่อ wss://api.exchangerate.dev/v1/stream แล้วส่ง auth ภายใน 10 วินาที เก็บ API key ไว้บนเซิร์ฟเวอร์ ห้ามใส่ใน URL หรือ JavaScript สาธารณะ ไม่รองรับการเชื่อมต่อแบบไม่ระบุตัวตน หลังได้รับ authenticated ให้ส่ง subscribe รองรับสกุลเงินด้านล่าง คู่ไขว้ต้องใช้ข้อมูลล่าสุดที่ยังสดทั้งสองขาและเวลาต่างกันไม่เกิน 5 วินาที อาจมีสถานะ unavailable หรือ stale ทุกการเชื่อมต่อที่ยอมรับใช้โควตารายเดือนหนึ่งหน่วย
ตารางแสดงขีดจำกัดบัญชีใหม่ บัญชีเดิมยังคงใช้แผนเดิม Basic 3 × 25 หรือ Pro 10 × 100 (จำนวนการเชื่อมต่อ × คู่สกุลเงินต่อการเชื่อมต่อ) ข้อความ authenticated จะแสดงขีดจำกัดที่ใช้กับบัญชีของคุณ
AUD, CAD, CHF, EUR, GBP, JPY, MXN, NOK, NZD, PLN, SEK, SGD, USD, ZAR
| แพ็กเกจ | การเชื่อมต่อพร้อมกัน | คู่ต่อการเชื่อมต่อ |
|---|---|---|
| Free | 0 | 0 |
| Basic | 0 | 0 |
| Plus | 1 | 10 |
| Pro | 3 | 100 |
{"action":"auth","api_key":"YOUR_KEY"}{"action":"subscribe","base":"EUR","symbols":["USD","JPY"]}Errors
REST: ทุก error ใช้ { result: "error", code, message } 429 มี Retry-After และเมื่อแหล่งข้อมูลล้มเหลวจะไม่มีข้อมูลจำลองมาแทน HTTP 403 plan_gated มี tier, interval หากเกินช่วงประวัติจะมี history_days, earliest_allowed ด้วย หากอัปเกรดแล้วเรียกคำขอนี้ได้ จะมี upgrade_plans, upgrade_offers (plan, loses), upgrade_url
{ "result": "error", "code": "missing_parameter", "message": "required parameter missing: symbols"}{ "result": "error", "code": "plan_gated", "message": "The 15m interval is not included in your plan.", "tier": "plus_2026", "interval": "15m", "upgrade_plans": ["pro_2026"], "upgrade_offers": [{ "plan": "pro_2026", "loses": [] }], "upgrade_url": "https://exchangerate.dev/pricing?plan=pro_2026&source=api&reason=plan_gated"}curl -fsS --max-time 10 "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP"from urllib.request import Request, urlopenimport json# Identify your application explicitly when calling the API.request = Request("https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP", headers={"User-Agent": "exchangerate-docs/1.0"})with urlopen(request, timeout=10) as response: data = json.load(response)print(data["rates"]["EUR"])const response = await fetch("https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP", { signal: AbortSignal.timeout(10_000),});if (!response.ok) throw new Error(`HTTP ${response.status}`);const data = await response.json();console.log(data.rates.EUR);คู่มือการเชื่อมต่อ: Python · JavaScript / Node.js · Google Sheets · Excel · Go · Swift · Zapier