Skip to content

Rate Limit

EasySlip API จำกัดอัตราการเรียกใช้งานเป็นจำนวนครั้งต่อวินาที (TPS — Transactions Per Second) เพื่อให้ระบบตรวจสอบสลิปให้บริการได้เสถียรกับผู้ใช้ทุกคน

TPS ของแต่ละแพ็กเกจ

TPS ที่ใช้ได้ขึ้นอยู่กับแพ็กเกจของคุณ ถ้าไม่แน่ใจว่าได้เท่าไร หรืออยากได้สูงกว่าที่แพ็กเกจกำหนด ติดต่อฝ่ายสนับสนุนเพื่อขอปรับเฉพาะบัญชีได้

ขีดจำกัดนี้แยกกันระหว่างการตรวจสอบ สลิปธนาคาร และ TrueMoney Wallet การเรียกฝั่งหนึ่งไม่ไปกินโควต้าอีกฝั่ง

Response Header

ทุก request ที่ผ่านระบบ rate limit จะได้ header เหล่านี้กลับมา

Headerความหมาย
X-RateLimit-Limitจำนวน request ต่อวินาทีที่ใช้ได้ในขณะนั้น
X-RateLimit-Remainingจำนวนที่เหลือในวินาทีปัจจุบัน
X-RateLimit-Resetจำนวนวินาทีจนกว่าตัวนับจะรีเซ็ต
Retry-Afterส่งมาเฉพาะตอนถูกปฏิเสธ (429) — ให้รอกี่วินาทีก่อนลองใหม่

TIP

ค่า X-RateLimit-Limit อาจเปลี่ยนได้ตามสภาพโหลดของระบบ ให้อ่านจาก header ทุกครั้ง แทนการ hard-code ตัวเลขไว้ในโค้ด

เมื่อถูกจำกัด

จะได้ HTTP status 429 พร้อม header Retry-After

v2

json
{
    "success": false,
    "error": {
        "code": "RATE_LIMIT_EXCEEDED",
        "message": "Rate limit exceeded"
    }
}

v1

json
{
    "status": 429,
    "message": "rate_limit_exceeded"
}

วิธีรับมือที่แนะนำ

  1. รอตาม Retry-After อย่าลองใหม่ทันที — การยิงซ้ำรัว ๆ ทำให้โดนปฏิเสธนานขึ้น
  2. ใช้ exponential backoff ถ้ายังโดน 429 ซ้ำ ให้เพิ่มเวลารอขึ้นเรื่อย ๆ
  3. ทำคิวฝั่งคุณเอง ถ้ามีสลิปเข้ามาเป็นก้อนใหญ่ ให้ทยอยส่งตาม TPS ที่มี ดีกว่าปล่อยให้โดนปฏิเสธ
  4. เฝ้าดู X-RateLimit-Remaining เพื่อชะลอตัวเองก่อนจะชนเพดาน

ตัวอย่าง JavaScript

javascript
async function verifyWithRetry(payload, maxRetries = 3) {
    for (let attempt = 0; attempt <= maxRetries; attempt++) {
        const res = await fetch('https://api.easyslip.com/v2/verify/bank', {
            method: 'POST',
            headers: {
                Authorization: `Bearer ${API_KEY}`,
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({ payload }),
        })

        if (res.status !== 429) return res.json()

        // รอตามที่เซิร์ฟเวอร์บอก แล้วค่อยเพิ่มเวลารอแบบ exponential
        const retryAfter = Number(res.headers.get('Retry-After') ?? 1)
        const waitSec = retryAfter * 2 ** attempt
        await new Promise(r => setTimeout(r, waitSec * 1000))
    }

    throw new Error('rate limit exceeded after retries')
}

ตัวอย่าง Python

python
import time
import requests

def verify_with_retry(payload, max_retries=3):
    for attempt in range(max_retries + 1):
        res = requests.post(
            'https://api.easyslip.com/v2/verify/bank',
            headers={'Authorization': f'Bearer {API_KEY}'},
            json={'payload': payload},
        )

        if res.status_code != 429:
            return res.json()

        retry_after = int(res.headers.get('Retry-After', 1))
        time.sleep(retry_after * (2 ** attempt))

    raise Exception('rate limit exceeded after retries')

ต่างจาก quota_exceeded อย่างไร

Rate limit (429)โควต้าหมด (quota_exceeded)
จำกัดอะไรจำนวน request ต่อวินาทีจำนวนสลิปที่ตรวจได้ ทั้งหมด ตามแพ็กเกจ
แก้ยังไงรอแล้วลองใหม่เติมโควต้า หรือรอรอบรีเซ็ต
หายเองไหมหายเองภายในไม่กี่วินาทีไม่หายจนกว่าจะเติมหรือถึงรอบรีเซ็ต

ที่เกี่ยวข้อง

Bank Slip Verification API for Thai Banking