API referenceEndpointscreateTask
createTask
Queues one solve. The body names the captcha type and the page it sits on, and the response hands back an id you poll for the answer.
Request
POST/createTask
POST /createTask HTTP/1.1
Host: api.jevcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": "https://example.com/login",
"websiteKey": "6LcR_okUAAAAAPYr..."
}
}| Field | Type | Required | What it is |
|---|---|---|---|
clientKey | String | Yes | Your account key, from the dashboard. |
task | Object | Yes | The task itself. Its shape depends on task.type; each type has a page in the sidebar. |
appId | String | No | Developer id, if you are billing solves through an integration. |
callbackUrl | String | No | An HTTPS address to post the finished result to, instead of polling. |
Response
Token types queue and answer nothing yet:
JSON
{
"errorId": 0,
"errorCode": "",
"errorDescription": "",
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}| Field | Type | What it means |
|---|---|---|
errorId | Integer | 0 for accepted, 1 for rejected. |
errorCode | String | Empty when accepted. See error codes. |
errorDescription | String | One sentence saying what went wrong. |
taskId | String | The id to poll. Hold on to it; there is no way to look it up again. |
Every type we take is asynchronous, so this response never carries a solution. errorCode and errorDescription are on every response from every endpoint, empty when nothing is wrong. Some samples in these pages leave them out for room; your parser should not.
A rejected task
Rejection is an HTTP 200 with errorId set. Read the body, not the status line:
JSON
{
"errorId": 1,
"errorCode": "ERROR_ZERO_BALANCE",
"errorDescription": "Your balance will not cover this task. Add funds and retry.",
"taskId": ""
}Callbacks instead of polling
Pass callbackUrl and we post the finished result to it rather than making you ask. The body is what /getTaskResult would have returned:
JSON
{
"errorId": 0,
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006",
"status": "ready",
"solution": {
"gRecaptchaResponse": "3AHJ...",
"expireTime": 1671615324290
}
}- The address has to be HTTPS and reachable from the public internet.
- We try three times, backing off 5, 30 and 120 seconds, then give up.
- A callback does not stop you polling. Both work on the same task.
Next
Take the taskId to getTaskResult, or pick your captcha from the task type pages in the sidebar.
Last updated 21 September 2026