ERROR_NO_SLOT_AVAILABLE means all CaptchaAI workers for your requested CAPTCHA type are busy. This is a transient error — wait and retry.
Why This Happens
| Cause | Frequency |
|---|---|
| Peak usage hours | Common during business hours |
| Burst of concurrent requests | When you submit many tasks at once |
| Specific type overloaded | Some CAPTCHA types have fewer workers |
| Temporary capacity constraint | Rare, auto-resolves in seconds |
Basic Retry Logic
import time
import requests
def submit_with_slot_retry(api_key, method, params, max_retries=5):
"""Submit task with automatic retry on NO_SLOT_AVAILABLE."""
delay = 3
for attempt in range(max_retries):
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": api_key,
"method": method,
"json": 1,
**params,
}, timeout=30)
result = resp.json()
if result.get("status") == 1:
return result["request"]
error = result.get("request", "")
if error == "ERROR_NO_SLOT_AVAILABLE":
print(f"No slot available. Retry in {delay}s (attempt {attempt + 1})")
time.sleep(delay)
delay = min(delay * 1.5, 15) # Cap at 15 seconds
continue
# Non-retriable error
raise RuntimeError(f"Submit error: {error}")
raise RuntimeError("Max retries exceeded — no slots available")
Throttled Batch Submission
Avoid triggering NO_SLOT by pacing your submissions:
import time
import requests
def submit_batch_throttled(api_key, tasks, rate_per_second=2):
"""Submit tasks at a controlled rate."""
interval = 1.0 / rate_per_second
task_ids = []
for task in tasks:
while True:
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": api_key,
"method": task["method"],
"json": 1,
**task["params"],
}, timeout=30)
result = resp.json()
if result.get("status") == 1:
task_ids.append(result["request"])
break
if result.get("request") == "ERROR_NO_SLOT_AVAILABLE":
time.sleep(5)
continue
raise RuntimeError(result.get("request"))
time.sleep(interval)
return task_ids
Pre-Check Capacity
Check if slots are likely available before submitting large batches:
def check_capacity(api_key):
"""Quick check: submit a small test to see if slots are open."""
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": api_key,
"method": "base64",
"body": "/9j/4AAQSkZJRg==", # Tiny test image
"json": 1,
}, timeout=10)
result = resp.json()
if result.get("request") == "ERROR_NO_SLOT_AVAILABLE":
return False
return True
Scheduling Around Peak Hours
CaptchaAI capacity varies by time:
| Time (UTC) | Capacity | Recommendation |
|---|---|---|
| 00:00–06:00 | High availability | Best for batch jobs |
| 06:00–12:00 | Moderate | Normal operations |
| 12:00–18:00 | Peak demand | Expect occasional NO_SLOT |
| 18:00–24:00 | Moderate | Good for batches |
import datetime
def should_batch_now():
"""Check if current time is good for batch processing."""
hour = datetime.datetime.utcnow().hour
if 0 <= hour < 6:
return True # Off-peak
if 18 <= hour < 24:
return True # Moderate
return False # Peak hours — use slower rate
Troubleshooting
| Issue | Cause | Fix |
|---|---|---|
| Persistent NO_SLOT for minutes | Heavy platform load | Wait 5-10 minutes and retry |
| Only certain types affected | Type-specific capacity | Try off-peak or reduce batch size |
| Error appears in bursts | Submitting too fast | Throttle to 2-3 tasks/second |
| Happens only at certain times | Peak hours | Schedule batches for off-peak |
FAQ
How long should I wait between retries?
Start with 3 seconds and increase by 50% each retry, capping at 15 seconds. Most slot issues resolve within 5-10 seconds.
Is NO_SLOT billed?
No. Failed submissions are not charged. Only successful solves are billed.
Should I switch providers on NO_SLOT?
No. Brief slot unavailability is normal for all providers. Implement retry logic instead — it's simpler and more reliable.
Related Guides
Handle capacity gracefully — get CaptchaAI.
Discussions (0)
Join the conversation
Sign in to share your opinion.
Sign InNo comments yet.