General
Updated 9/3/2026
Solverify API Error Codes
Use this reference to understand Solverify API error codes, request validation limits, billing failures, task capacity errors, and recommended recovery actions. These errors can be returned by createTask, getTaskResult, getBalance, profile, and activeTasks requests.
Solverify customer API clients must inspect both the HTTP response and the JSON errorId. A successful HTTP request can still contain an API-level validation, authentication, billing, or task error.
Standard Solverify API Error Response
Most customer-facing validation and business errors use a consistent JSON structure and may be returned with HTTP 200:
{
"errorId": 1,
"errorCode": "ERROR_CODE_HERE",
"errorDescription": "Human-readable explanation"
}
| Field | Type | Description |
|---|---|---|
errorId | number | 0 indicates success. 1 indicates an API-level error. |
errorCode | string or null | Stable machine-readable code used by application logic. |
errorDescription | string or null | Human-readable details about the failure. |
Some internal and node routes use HTTP status codes such as 400, 401, 404, 409, or 500. Always handle transport failures and non-success HTTP statuses in addition to checking errorId.
Request and Validation Errors
These errors indicate that the request or task payload must be corrected before retrying.
| Error code | Meaning | Recommended action |
|---|---|---|
ERROR_INVALID_REQUEST | The request body contains invalid JSON or is missing required top-level fields. | Validate the JSON structure and required fields before sending the request again. |
ERROR_INVALID_TASK | The task object is malformed or required task parameters are missing or invalid. | Compare the task payload with the documentation for that CAPTCHA type. |
ERROR_UNSUPPORTED_TASK | The requested task type is not currently supported or priced. | Use a supported task type and verify its exact task name. |
Do not repeatedly retry validation errors with the same payload. Correct the request first.
API Key and Account Errors
| Error code | Meaning | Recommended action |
|---|---|---|
ERROR_INVALID_KEY | The supplied clientKey was not found or is invalid. | Verify the key and ensure whitespace or quotation marks were not included accidentally. |
ERROR_KEY_EXPIRED | The API key has expired. | Create or activate a valid API key before retrying. |
ERROR_USER_NOT_FOUND | No account profile was found for the API key's user. | Verify the account and contact support if the key should be active. |
ERROR_IP_BANNED | The client IP was temporarily banned after repeated invalid API key attempts. | Stop requests, correct the API key, and wait for the temporary restriction to end. |
ERROR_REQUEST_TEMPORARILY_BANNED | Account API access was temporarily blocked after repeated request failures. | Stop automated retries, identify the repeated failure, and retry later with corrected requests. |
Store API keys in environment variables or a secret manager. Never log the full clientKey when recording an error.
Billing and Task Limit Errors
| Error code | Meaning | Recommended action |
|---|---|---|
ERROR_INSUFFICIENT_BALANCE | The account balance is lower than the required task price. | Add funds or reduce submissions before creating another task. |
ERROR_PENDING_LIMIT_EXCEEDED | A pay-per-solve account exceeded its active task limit. | Wait for pending or processing tasks to finish before submitting more work. |
ERROR_BILLING_EXPIRED | The thread or subscription billing period has expired. | Renew billing before creating additional tasks. |
ERROR_THREAD_LIMIT_EXCEEDED | A thread or subscription account exceeded its allowed active task count. | Wait for active tasks to finish or adjust the assigned thread capacity. |
Use the Get Balance API to check available credit, the Get Profile API for account-wide task counters, and the Active Tasks API for website-level queue information.
Capacity and Task Processing Errors
| Error code | Meaning | Recommended action |
|---|---|---|
ERROR_NO_CAPACITY | No solver capacity is currently available for the requested task type. | Retry later with bounded backoff instead of sending rapid repeated requests. |
ERROR_TASK_CREATION_FAILED | The API could not create the task. | Review errorDescription, then retry cautiously if the request is valid. |
ERROR_TASK_NOT_FOUND | The task does not exist or is not accessible with the supplied API key. | Verify the taskId and use the same API key that created the task. |
ERROR_TASK_FAILED | The task reached the failed state. | Stop polling and inspect errorDescription for the task-specific reason. |
ERROR_UNKNOWN_STATUS | The task has an unexpected internal status. | Stop normal polling and contact support if the condition continues. |
ERROR_TIMEOUT | The operation exceeded its allowed processing time. | Retry according to the endpoint and use bounded backoff. |
Internal API Errors
| Error code | Meaning | Recommended action |
|---|---|---|
ERROR_INTERNAL | An unexpected server-side error occurred. | Retry with bounded backoff. Contact support if repeated attempts continue to fail. |
Do not retry indefinitely. Set a maximum attempt count or overall deadline and log enough non-sensitive context to investigate repeated failures.
API Error Handling Examples
These examples demonstrate the important two-stage check: validate the HTTP response first, then inspect errorId in the JSON body.
curl --request POST \
--url https://solver.solverify.net/getBalance \
--header "Content-Type: application/json" \
--data '{"clientKey":"YOUR_API_KEY"}'
Request Validation Limits
Requests and task fields must stay within these limits:
| Field or request | Validation requirement |
|---|---|
| Request body | Maximum size of 10 MB. |
websiteURL | Valid URL with a maximum length of 2,048 characters. |
websiteKey | Maximum length of 256 characters. |
proxyType | Must be http. |
proxyAddress | Maximum length of 256 characters. |
proxyPort | Numeric string containing 1 to 5 digits. |
OCR base64 | Maximum length of 5,242,880 characters. |
DataDome captchaUrl | Valid URL with a maximum length of 4,096 characters. |
DataDome and Akamai useragent | Do not send this field. Both solvers use Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 by default. |
Aliyun prefix | Required, with a maximum length of 128 characters. |
Aliyun region | Optional; accepted values are sgp and cn. |
Aliyun useragent | Optional, with a maximum length of 512 characters. |
Validate payloads before sending them. Client-side validation reduces failed requests and helps prevent temporary request restrictions caused by repeated invalid submissions.
Active Task Limits
Pay-per-solve accounts default to a maximum of 20 active tasks unless configured otherwise. Thread and subscription accounts are limited by their assigned thread count while billing is active.
Both pending and processing tasks count as active work. If a limit is reached, wait for existing tasks to complete before creating more tasks.
Retry Guidance
Use error-specific retry behavior instead of retrying every failure:
| Error category | Retry behavior |
|---|---|
| Invalid request or task | Do not retry until the payload is corrected. |
| Invalid or expired API key | Do not retry until valid credentials are configured. |
| Insufficient balance or expired billing | Resolve the billing condition before retrying. |
| Pending or thread limit exceeded | Wait for active tasks to finish, then retry. |
| No capacity, timeout, or internal error | Retry with bounded exponential backoff and a maximum attempt count. |
| Task not found or task failed | Stop polling the same task ID and investigate the error. |
| Temporary IP or request ban | Stop requests, correct the underlying issue, and wait before retrying. |
Frequently Asked Questions
Why can a Solverify API error return HTTP 200?
Customer API errors use a consistent JSON response shape. HTTP 200 confirms that the API handled the request, while errorId: 1 reports a validation, authentication, billing, capacity, or task-level failure.
Should I only check the HTTP status code?
No. Check the HTTP status and parse the JSON response. A response can have a successful HTTP status while containing errorId: 1.
Which error means the Solverify API key is invalid?
ERROR_INVALID_KEY means the supplied clientKey was not found or is invalid. Verify that the correct key was loaded and that it does not contain extra spaces.
What should I do after ERROR_INSUFFICIENT_BALANCE?
Stop creating tasks and add funds to the account. Use POST /getBalance to confirm the updated balance before resuming submissions.
Should I retry ERROR_NO_CAPACITY immediately?
No. Wait before retrying and use bounded backoff. Rapid retries add request volume without creating solver capacity.
How should I handle ERROR_TASK_FAILED?
Stop polling that task ID and inspect errorDescription. Correct any task-specific issue before deciding whether to create a replacement task.
What information should I log for API errors?
Log the endpoint, errorCode, errorDescription, task ID when available, attempt count, and timestamp. Do not log the full API key, proxy credentials, or sensitive task payloads.