Skip to content

Rate Limits

endpoint การตรวจสอบถูกจำกัดอัตราต่อ service ด้วย transactions per second (TPS) ทุก response มี header rate-limit และ request ที่เกิน limit จะได้ 429

Response headers

ทุก response ของการตรวจสอบ (สำเร็จหรือ error) จะมี:

Headerคำอธิบาย
X-RateLimit-Limitโควตา request ต่อวินาทีปัจจุบันของคุณ
X-RateLimit-Remainingrequest ที่เหลือใน window ปัจจุบัน
X-RateLimit-Resetวินาทีจนกว่า window จะรีเซ็ต
http
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 49
X-RateLimit-Reset: 1

เมื่อเกิน limit

request ที่เกิน limit จะได้ 429 Too Many Requests พร้อม header Retry-After (วินาที):

http
HTTP/1.1 429 Too Many Requests
Retry-After: 1
json
{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded"
  }
}

การจัดการ 429

ให้ back off แล้ว retry หลังช่วงเวลาใน Retry-After วิธีที่เรียบง่ายและถูกต้อง:

javascript
async function verifyWithRetry(doRequest, { maxRetries = 3 } = {}) {
  for (let attempt = 0; ; attempt++) {
    const response = await doRequest();
    if (response.status !== 429) return response;
    if (attempt >= maxRetries) throw new Error('Rate limited: retries exhausted');

    const retryAfter = Number(response.headers.get('Retry-After')) || 1;
    await new Promise((r) => setTimeout(r, retryAfter * 1000));
  }
}
typescript
async function verifyWithRetry(doRequest: () => Promise<Response>, maxRetries = 3): Promise<Response> {
  for (let attempt = 0; ; attempt++) {
    const response = await doRequest();
    if (response.status !== 429) return response;
    if (attempt >= maxRetries) throw new Error('Rate limited: retries exhausted');

    const retryAfter = Number(response.headers.get('Retry-After')) || 1;
    await new Promise((r) => setTimeout(r, retryAfter * 1000));
  }
}
python
import time

def verify_with_retry(do_request, max_retries=3):
    for attempt in range(max_retries + 1):
        response = do_request()
        if response.status_code != 429:
            return response
        if attempt >= max_retries:
            raise Exception('Rate limited: retries exhausted')

        retry_after = int(response.headers.get('Retry-After', '1'))
        time.sleep(retry_after)
php
function verifyWithRetry(callable $doRequest, int $maxRetries = 3)
{
    for ($attempt = 0; ; $attempt++) {
        [$status, $headers, $response] = $doRequest();
        if ($status !== 429) {
            return $response;
        }
        if ($attempt >= $maxRetries) {
            throw new Exception('Rate limited: retries exhausted');
        }

        $retryAfter = (int) ($headers['Retry-After'] ?? 1);
        sleep($retryAfter);
    }
}

ลดแรงกดดันจาก rate limit

  • ดู X-RateLimit-Remaining แล้วชะลอก่อนจะถึง 0
  • งานปริมาณมากให้ใช้async batch verify — ส่งหลายสลิปในครั้งเดียวและรับผลผ่าน webhook ช่วยเกลี่ย spike
  • กระจาย traffic ให้สม่ำเสมอแทนการยิงเป็นก้อน เพราะ limit เป็นแบบต่อวินาที

หมายเหตุ

  • limit TPS ตั้งต่อ service ติดต่อ account manager ถ้าต้องการ limit สูงขึ้น
  • header rate-limit ปรากฏในทุก response ของการตรวจสอบ รวมถึง 429
  • Retry-After เป็นวินาที — ให้ทำตามแทนการ retry ทันที

Bank Slip Verification API for Thai Banking