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..."
  }
}
FieldTypeRequiredWhat it is
clientKeyStringYesYour account key, from the dashboard.
taskObjectYesThe task itself. Its shape depends on task.type; each type has a page in the sidebar.
appIdStringNoDeveloper id, if you are billing solves through an integration.
callbackUrlStringNoAn 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"
}
FieldTypeWhat it means
errorIdInteger0 for accepted, 1 for rejected.
errorCodeStringEmpty when accepted. See error codes.
errorDescriptionStringOne sentence saying what went wrong.
taskIdStringThe 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