Error Codes and Reasons

Error CodeReason
404 Not FoundThe requested resource (Task / Runner / etc) does not exist in the system.
50x Internal Server Error:Server-side issues preventing successful request processing.
400 Bad Request (implied):Client sent an invalid or malformed request.
403 Forbidden (implied):Client lacks necessary permissions for the requested action.
422 Validation ErrorThe request (inputs / etc) are malformed.
429 Rate Limit ErrorClient is exceeding allowed rate limit.

4xx errors mean client should fix error before retrying, 5xx mean they should retry unchanged.

Handling Common Error Scenarios

Schema Violations

try:
    response = requests.post(f"{BASE_URL}/tasks", json=task_data)
    response.raise_for_status()
except requests.exceptions.HTTPError as e:
    if e.response.status_code == 422:
        print("Schema validation failed:", e.response.json())
    raise

Timeouts

try:
    response = requests.post(
        f"{BASE_URL}/tasks/{task_id}/runs",
        json={"arguments": input_data, "runner":"neon"},
        timeout=300  # Long timeout for deep research
    )
except requests.exceptions.Timeout:
    print("Task execution timed out")

Rate Limits

def run_with_retry(task_id, input_data, max_retries=3):
    for attempt in range(max_retries):
        try:
            response = requests.post(
                f"{BASE_URL}/tasks/{task_id}/runs",
                json={"arguments": input_data}
            )
            if response.status_code == 429:
                # Rate limited - wait and retry
                time.sleep(2 ** attempt)  # Exponential backoff
                continue
            response.raise_for_status()
            return response.json()
        except requests.exceptions.RequestException as e:
            if attempt == max_retries - 1:
                raise