Error Codes Reference
When something goes wrong, Exovon should return clear, actionable error codes. No vague "something broke" messages. Every error tells you exactly what happened and how to fix it.
HTTP Status Codes
| Code | Meaning | When It Happens | How to Fix |
|---|---|---|---|
| 200 | OK | Request successful. | Nothing — you're good. |
| 400 | Bad Request | Missing or invalid parameters. | Check your request body and query parameters. Ensure all required fields are present and correctly formatted. |
| 401 | Unauthorized | Authentication failure. | Verify your API token. Check if it has expired or been revoked. Generate a new token from your dashboard if needed. |
| 403 | Forbidden | Access denied, quota exhausted, or reused grant. | Your plan limit may be reached, or you're trying to reuse an already-consumed grant code. Check your Limits & Quotas or generate a fresh grant. |
| 413 | Payload Too Large | Request body exceeds your plan's payload limit. | Reduce request size. Limits: Free 3MB, Starter 4MB, Pro 6.5MB (Vercel + 2MB), Heavy 20MB. Use multipart uploads or split the payload. |
| 429 | Too Many Requests | Concurrent request limit or rate limit exceeded. | Slow down. Check the Retry-After header for when to retry. Consider upgrading your plan or implementing exponential backoff. |
| 499 | Client Closed Request | The client disconnected before the server could respond. | Check your client-side timeout settings. If this happens frequently, your request may be taking too long — optimize or upgrade for higher timeout limits. |
| 500 | Internal Server Error | Unhandled backend failure. | This is on us. Check our status page and retry. If it persists, contact support. |
| 504 | Gateway Timeout | Request execution exceeded container timeout. | Optimize your code to run faster. Limits: Free 10s, Starter 30s, Pro 60s, Heavy 120s. For long-running tasks, use background jobs or serverless cron. |
Deploy & Build Errors
| Code | Meaning | When It Happens | How to Fix |
|---|---|---|---|
| BUILD_TIMEOUT | Build exceeded time limit. | Your build took longer than your plan allows. | Optimize your build: cache dependencies, remove unused packages, or upgrade your plan. Limits: Free 5min, Starter 15min, Pro 30min, Heavy 60min. |
| BUILD_FAILED | Build script returned non-zero exit code. | npm run build failed. | Check build logs in your dashboard. Common causes: missing env vars, TypeScript errors, or missing dependencies. |
| MEMORY_LIMIT | Container exceeded RAM during build or runtime. | Free: 512MB / Starter (₹349): 1GB / Pro (₹1,499): 1GB / Heavy: Custom. | Optimize memory usage or upgrade your plan tier. Heavy plans get custom RAM allocation. |
| STARTUP_FAILED | App crashed on container boot. | Your app exited immediately after starting. | Check that your start script is correct. Ensure your app listens on the port provided by the PORT env var. |
| INVALID_FRAMEWORK | Unsupported framework detected. | Your package.json doesn't match supported frameworks. | We support Next.js, React, Vue, Svelte, Nuxt, and Node.js. Ensure your framework is listed or use a custom config. |
| GITHUB_AUTH | Could not access repository. | GitHub token expired or repo permissions changed. | Re-authenticate your GitHub integration in the dashboard. Ensure the Exovon app has access to the repo. |
| DEPLOY_RATE_LIMIT | Too many deploys in your billing cycle. | Free: 3 builds/mo exceeded. Starter: 150 mins/mo exceeded. Pro: 200 mins/mo exceeded. | Wait for the next billing cycle, upgrade your plan, or contact support for high-frequency CI/CD requirements. |
Database Errors
| Code | Meaning | When It Happens | How to Fix |
|---|---|---|---|
| DB_CONNECTION_LIMIT | Max database connections reached. | Standard hosting tiers provide frontend edge hosting. ExoStore PostgreSQL requires database provisioning. Heavy / Dedicated: 500+ connections. | Use connection pooling (PgBouncer) or the connectionless HTTP driver (@neondatabase/serverless). Upgrade for higher concurrency. |
| DB_TIMEOUT | Query or connection exceeded 30 seconds. | Connection idle timeout or slow query. | Optimize your query. Add indexes. For long-running analytics, use a separate read replica or background job. |
| DB_STORAGE_FULL | Database storage limit reached. | ExoStore PostgreSQL dedicated cluster storage limit reached. | Free up space (drop old data, vacuum), or scale your dedicated database cluster storage. |
Quota & Limit Errors
| Code | Meaning | When It Happens | How to Fix |
|---|---|---|---|
| BANDWIDTH_EXHAUSTED | Monthly origin bandwidth limit reached. | Free: 1GB. Starter (₹349): 10GB. Pro (₹1,499): 40GB. Heavy: 1,000GB (1TB). | Your site is throttled but still live. Purchase a Booster Pack (₹199/50GB) or upgrade your plan. |
| STORAGE_EXHAUSTED | Deployment or persistent storage limit reached. | Free: 100MB. Starter (₹349): 5GB. Pro (₹1,499): 25GB. Heavy: 100GB+. | Delete unused deployments/assets or upgrade your plan tier. |
| CUSTOM_DOMAIN_LIMIT | Max custom domains reached. | Free: 0 (.exovon.co.in subdomain only). Starter (₹349): 5. Pro (₹1,499): Unlimited. Heavy: Unlimited (fair use). | Remove unused domains or upgrade. Heavy plans have unlimited domains. |
| PROJECT_LIMIT | Max active projects reached. | Free: 1. Starter (₹349): 5. Pro (₹1,499): 10. Heavy: Unlimited. | Archive old projects or upgrade. Heavy plans allow unlimited active projects. |
Authentication & Token Errors
| Code | Meaning | When It Happens | How to Fix |
|---|---|---|---|
| MISSING_TOKEN | No API token provided. | Request sent without Authorization header. | Include Authorization: Bearer <your-token> in all API requests. |
| EXPIRED_TOKEN | API token has expired. | Token past its expiry date. | Generate a new token from your dashboard. |
| REVOKED_TOKEN | API token was manually revoked. | The API token was manually revoked. | Generate a new token and update your code. |
| INSUFFICIENT_SCOPE | Token lacks permission for this action. | Token was created with limited scopes. | Re-create the token with the required scopes (e.g., deploy:write, project:read). |
| REUSED_GRANT | OAuth grant code already consumed. | Grant code used twice. | Grant codes are single-use. Initiate a fresh OAuth flow. |
Error Response Format
Every error response follows this JSON structure:
{
"error": {
"code": "BUILD_TIMEOUT",
"message": "Build exceeded the 30-minute timeout for your Pro plan.",
"details": {
"plan": "Pro",
"limit": "30 minutes",
"actual": "32 minutes 14 seconds",
"docs_url": "https://exovon.in/docs/errors/BUILD_TIMEOUT"
},
"request_id": "req_8f3a9b2c1d4e",
"timestamp": "2026-08-09T00:29:00Z"
}
}ℹ️
Always include the request_id when contacting support. It lets us trace exactly what happened.
Quick Fixes by Symptom
| Symptom | Likely Cause | Quick Fix |
|---|---|---|
| Site loads slowly | Bandwidth throttled | Check dashboard usage. Buy Booster Pack or upgrade. |
| Deploy button greyed out | Deploy limit reached | Wait for next cycle or upgrade plan. |
| Database connection errors | Connection pool exhausted | Use PgBouncer. Close idle connections. Upgrade plan. |
| 504 on every request | Code too slow | Profile your code. Move heavy work to background jobs. |
| 401 after working before | Token expired | Regenerate token in dashboard. |
| 429 constantly | No rate limiting in your code | Implement exponential backoff. Check Retry-After header. |