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-Remaining | request ที่เหลือใน 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: 1json
{
"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 ทันที