API Error Codes
Comprehensive reference for all error codes returned by the Vertaa API. Each entry includes HTTP status, common causes, resolution steps, and request/response examples.
Quick Reference
Authentication
Authorization
Rate Limiting
Server Error
api_key_revokedAPI key has been explicitly revoked
Common Causes
- Key revoked via dashboard
- Key compromised and auto-revoked
- Account security incident
Resolution Steps
- Generate a new API key from dashboard
- Review account security settings
- Contact support if revocation was unexpected
Example
Response:
{
"error": "api_key_revoked",
"message": "This API key has been revoked. Generate a new key from your dashboard.",
"details": {
"revoked_at": "2025-01-10T12:30:00Z"
}
}forbiddenAuthenticated but insufficient permissions
Common Causes
- Attempting to access another user's audit
- Attempting to modify resources you don't own
- IP not whitelisted (Enterprise feature)
Resolution Steps
- Verify you're using the correct job_id for your account
- Check resource ownership in dashboard
- Contact admin to update IP whitelist (Enterprise only)
Example
Response:
{
"error": "forbidden",
"message": "You do not have permission to access this resource"
}tier_restrictionFeature requires a higher pricing tier
Common Causes
- Attempting to use deep mode on Free tier
- Requesting > 5 pages on Pro tier
- Using webhooks on Free tier
Resolution Steps
- Upgrade plan from /pricing
- Use basic mode or reduce page count
- Review tier limits at /developer-docs#rate-limiting
Example
Request:
POST /v1/audit
{
"url": "https://example.com",
"mode": "deep",
"max_pages": 10
}Response:
{
"error": "tier_restriction",
"message": "Deep mode requires Pro or Enterprise plan",
"details": {
"current_tier": "free",
"required_tier": "pro",
"upgrade_url": "https://vertaaux.ai/pricing"
}
}invalid_requestRequest is malformed or contains invalid data
Common Causes
- JSON syntax error in request body
- Missing Content-Type: application/json header
- Invalid field types (e.g., string instead of number)
Resolution Steps
- Validate JSON syntax before sending
- Include Content-Type: application/json header
- Check field types match OpenAPI spec
Example
Request:
POST /v1/audit
{
"url": "https://example.com",
"mode": "basic",
"max_pages": "five" // Should be number
}Response:
{
"error": "invalid_request",
"message": "Invalid field type",
"details": {
"field": "max_pages",
"expected": "number",
"received": "string"
}
}invalid_urlURL format is invalid or not accessible
Common Causes
- URL missing http:// or https:// scheme
- Malformed domain name
- Internal IP addresses (localhost, 127.0.0.1, 10.x.x.x)
- URL contains invalid characters
Resolution Steps
- Ensure URL starts with https:// or http://
- Test URL in browser first
- Use publicly accessible URLs only
- URL-encode special characters
Example
Request:
POST /v1/audit
{
"url": "example.com", // Missing scheme
"mode": "basic"
}Response:
{
"error": "invalid_url",
"message": "Invalid URL format. Must be a valid HTTP or HTTPS URL.",
"details": {
"field": "url",
"value": "example.com",
"hint": "Did you mean https://example.com?"
}
}invalid_modeAudit mode must be 'basic' or 'deep'
Common Causes
- Mode field contains unsupported value
- Typo in mode name
- Mode field missing (should default to 'basic')
Resolution Steps
- Use mode: 'basic' for single-page audits
- Use mode: 'deep' for multi-page crawling (Pro+)
- Check spelling matches exactly: 'basic' or 'deep'
Example
Request:
POST /v1/audit
{
"url": "https://example.com",
"mode": "standard" // Invalid
}Response:
{
"error": "invalid_mode",
"message": "Mode must be 'basic' or 'deep'",
"details": {
"field": "mode",
"value": "standard",
"allowed_values": ["basic", "deep"]
}
}missing_parameterRequired request parameter is missing
Common Causes
- URL field not provided in POST /audit
- Webhook secret missing in POST /webhooks
- Required query parameter omitted
Resolution Steps
- Check OpenAPI spec for required fields
- Include all required parameters in request
- Verify field names match documentation exactly
Example
Request:
POST /v1/audit
{
"mode": "basic"
// Missing 'url' field
}Response:
{
"error": "missing_parameter",
"message": "Required parameter missing",
"details": {
"field": "url",
"location": "body"
}
}page_limit_exceededmax_pages exceeds tier limit
Common Causes
- Free tier: max_pages > 1
- Pro tier: max_pages > 5
- Enterprise tier: max_pages > 20
Resolution Steps
- Reduce max_pages to your tier limit
- Upgrade plan for higher limits
- Split audit into multiple requests
Example
Request:
POST /v1/audit
{
"url": "https://example.com",
"mode": "deep",
"max_pages": 50
}Response:
{
"error": "page_limit_exceeded",
"message": "max_pages exceeds tier limit",
"details": {
"requested": 50,
"max_allowed": 5,
"current_tier": "pro"
}
}rate_limit_exceededAPI quota exhausted for current period
Common Causes
- Free: >3 audits per day
- Pro: >1000 audits per month
- Enterprise: Custom limit exceeded
- Burst limit exceeded (too many concurrent requests)
Resolution Steps
- Wait until quota reset time (see X-RateLimit-Reset header)
- Implement exponential backoff
- Upgrade plan for higher limits
- Distribute requests over time instead of bursting
Example
Response:
{
"error": "rate_limit_exceeded",
"message": "Daily audit quota exceeded. Resets at midnight UTC.",
"details": {
"limit": 3,
"reset_at": "2025-01-11T00:00:00Z"
}
}
Headers:
X-RateLimit-Limit: 3
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1736553600
Retry-After: 43200concurrent_limit_exceededToo many parallel requests
Common Causes
- Sending multiple audit requests simultaneously
- Polling status too aggressively (< 1 second intervals)
Resolution Steps
- Limit concurrency to 2 requests per account
- Use webhooks instead of polling
- Add delays between requests (minimum 1 second)
- Implement request queue on client side
Example
Response:
{
"error": "concurrent_limit_exceeded",
"message": "Maximum 2 concurrent requests allowed. Please queue subsequent requests.",
"details": {
"current_requests": 3,
"max_allowed": 2
}
}not_foundRequested resource does not exist
Common Causes
- Job ID does not exist
- Job belongs to different account
- Webhook ID invalid or deleted
- Endpoint path typo
Resolution Steps
- Verify job_id matches response from POST /audit
- Check you're using correct API key for the audit
- Confirm resource hasn't been deleted
- Review endpoint path in documentation
Example
Request:
GET /v1/audit/invalid_job_idResponse:
{
"error": "not_found",
"message": "Audit job not found",
"details": {
"job_id": "invalid_job_id"
}
}internal_errorUnexpected server error occurred
Common Causes
- Database connection failure
- Unhandled exception in audit engine
- Infrastructure issue
Resolution Steps
- Retry request after brief delay (5-10 seconds)
- Check status page (/status) for incidents
- Contact support if error persists
- Include job_id and timestamp in support ticket
Example
Response:
{
"error": "internal_error",
"message": "An unexpected error occurred. Our team has been notified.",
"details": {
"trace_id": "abc123xyz789",
"timestamp": "2025-01-10T15:30:00Z"
}
}timeoutPage load exceeded timeout limit
Common Causes
- Target website extremely slow (>30 seconds)
- Network connectivity issues
- Website blocking automated access
- Large page with many resources
Resolution Steps
- Verify URL loads in browser within 30 seconds
- Use mode: 'basic' for faster results
- Contact support if legitimate site fails consistently
- Check website isn't behind authentication
Example
Response:
{
"error": "timeout",
"message": "Page load exceeded 30 second timeout",
"details": {
"url": "https://very-slow-site.com",
"timeout_seconds": 30
}
}engine_failureAudit engine temporarily unavailable
Common Causes
- Engine maintenance in progress
- High load causing temporary unavailability
- Infrastructure scaling event
Resolution Steps
- Retry after 30-60 seconds
- Check status page for maintenance notices
- Subscribe to status updates at /status
Example
Response:
{
"error": "engine_failure",
"message": "Audit engine temporarily unavailable. Please retry.",
"details": {
"retry_after_seconds": 60
}
}
Headers:
Retry-After: 60Still Need Help?
If you're encountering an error not listed here or need additional assistance, our support team is here to help.