Error Handling

When a request fails — blocked by security, rate limited, or provider error — CloudVera returns a structured error response. All errors follow the same format so you can handle them consistently.

HTTP StatusError CodeMeaning
400security_blockedRequest blocked by security pipeline (prompt injection, PII, toxic content, guardrail violation)
401no_api_keyMissing or invalid CloudVera virtual key, or missing X-Provider-Key header
429rate_limit_exceededToo many requests — check Retry-After header for seconds until reset
429budget_exceededMonthly or daily spending cap reached for this virtual key
503circuit_openProvider temporarily unavailable — circuit breaker is open, auto-recovers
500provider_errorUpstream provider returned an error (model overloaded, invalid request, etc.)
500timeoutRequest timed out waiting for the provider response

Code Examples

Error response format

{
  "error": {
    "code": "security_blocked",
    "message": "Prompt injection detected: instruction override attempt",
    "details": {
      "issues": [
        {
          "type": "injection_detected",
          "severity": "high",
          "description": "Detected instruction override pattern"
        }
      ]
    }
  }
}

Handling errors (Node.js)

try {
  const completion = await openai.chat.completions.create({
    model: 'gpt-4o',
    messages: [{ role: 'user', content: userInput }],
  });
  return completion.choices[0].message.content;
} catch (error) {
  if (error.status === 400) {
    // Security blocked — prompt injection, PII, or policy violation
    console.error('Request blocked:', error.message);
    return 'Your message was blocked by our safety system.';
  }
  if (error.status === 429) {
    // Rate limited or budget exceeded
    const retryAfter = error.headers?.['retry-after'];
    console.error('Rate limited, retry after:', retryAfter, 'seconds');
    return 'Too many requests. Please try again later.';
  }
  if (error.status === 503) {
    // Provider down — circuit breaker open
    console.error('Provider unavailable, will auto-recover');
    return 'AI service temporarily unavailable. Please try again.';
  }
  throw error; // Unexpected error
}

Handling errors (Python)

from openai import OpenAI, APIError, RateLimitError

try:
    completion = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": user_input}],
    )
    return completion.choices[0].message.content
except RateLimitError as e:
    print(f"Rate limited: {e.message}")
    return "Too many requests. Please try again later."
except APIError as e:
    if e.status_code == 400:
        print(f"Security blocked: {e.message}")
        return "Your message was blocked by our safety system."
    raise