Skip to main content

Common Errors

401 Unauthorized

{
  "error": "unauthorized",
  "message": "Invalid API key"
}
Causes:
  • Missing Authorization header
  • Invalid API key format (should be Bearer YOUR_KEY)
  • API key is less than 10 characters
Solution:
# Correct format
curl -H "Authorization: Bearer your_api_key_here" ...

# Wrong (missing Bearer)
curl -H "Authorization: your_api_key_here" ...

403 Forbidden - Symbol Not Allowed

{
  "error": "forbidden",
  "message": "Symbol BTCUSDT not allowed for your API key",
  "allowed_symbols": ["EURUSD", "GBPUSD", "USDJPY", "XAUUSD"]
}
Cause: Your API key tier doesn’t have access to this symbol. Solution:
  1. Use one of the allowed_symbols from the error message
  2. Upgrade your plan to access more symbols
  3. Call GET /api/external/symbols to see your available symbols

503 No Data Available

{
  "error": "no_data",
  "message": "No bar data available. VPS/MT5 may be offline.",
  "symbol": "EURUSD",
  "timeframe": 60
}
Cause: The data source (VPS/MT5) is temporarily offline. Solutions:
  1. Wait a few minutes and retry
  2. Check our status page for outages
  3. Use cached data if you have it
This error is temporary. Our VPS typically reconnects within 5-15 minutes.

422 Validation Error

{
  "error": "validation_error",
  "message": "Point 0: type must be 'high' or 'low'",
  "point_index": 0
}
Cause: Invalid data in your request body. Common issues:
  • type must be exactly "high" or "low" (not "HIGH" or "above")
  • time must be a valid Unix timestamp
  • price must be a number, not a string

404 Indicator Not Found

{
  "error": "not_found",
  "message": "Indicator not found"
}
Causes:
  1. Indicator hasn’t been submitted yet
  2. Indicator expired (data expires after 24 hours)
  3. Wrong indicator_id, symbol, or timeframe
Solution:
# Make sure all three match
GET /api/external/indicators/my_indicator?symbol=EURUSD&timeframe=60

Rate Limiting

If you receive a 429 Too Many Requests error:
{
  "error": "rate_limit_exceeded",
  "message": "Too many requests. Limit: 100/hour",
  "retry_after": 3600
}
Solutions:
  1. Implement exponential backoff
  2. Cache responses where possible
  3. Upgrade to a higher tier for more requests

Debugging Tips

1. Check Your Request

import requests

response = requests.get(
    "https://api.innova-trading.com/api/external/bars",
    params={"symbol": "EURUSD", "timeframe": 60, "limit": 10},
    headers={"Authorization": "Bearer YOUR_KEY"}
)

# Print full response for debugging
print(f"Status: {response.status_code}")
print(f"Headers: {response.headers}")
print(f"Body: {response.text}")

2. Verify Your API Key Works

# Test with symbols endpoint (simplest)
curl -v "https://api.innova-trading.com/api/external/symbols" \
  -H "Authorization: Bearer YOUR_API_KEY"

3. Check Indicator Data

# List all your indicators
response = requests.get(
    "https://api.innova-trading.com/api/external/indicators",
    headers={"Authorization": "Bearer YOUR_KEY"}
)
print(response.json())

Getting Help

When reporting issues, please include:
  • Your API key (first 8 characters only)
  • The exact error message
  • The request you made (URL, method, body)
  • Timestamp when the error occurred