Skip to content
API
ReCAPTCHA
Image

ReCAPTCHA Image

Overview

Solve ReCaptcha image challenges with ultra-fast speed and top accuracy. We support all types of ReCaptcha image challenges — both on browsers and phones.

Our browser extension automatically solves ReCaptcha image challenges for you. No manual work needed — just install and it handles everything in the background.

📡

For API integration, send the captcha image and receive the indices of cells to click to solve the challenge.

ReCAPTCHA Image

1. Create Task

Request

POST https://api.achicaptcha.com/createTask

Parameters

Parameter NameData TypeRequired?Description
clientKeystringyesApi key
task.typestringyesComplexImageTask
task.subTypestringyesrecaptcha
task.imagestringyesOne or more captcha images in base64 format, separated by |. Capture only the grid area (no borders, no surrounding UI elements). Example: base64img1|base64img2
task.otherstringyesQuestion|Grid count
• Question: full question text shown in the captcha prompt (e.g. Select all images with a bus)
• Grid count: number of columns/rows (3, 4, or 5)
→ example: "Select all images with a bus|4"

Request Example

POST /createTask HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
 
{
  "clientKey": "YOUR_API_KEY",
  "task": {
    "type": "ComplexImageTask",
    "subType": "recaptcha",
    "image": "iVBORw0KGgoAAAANSUhEUgAA...(base64 encoded image)",
    "other": "Select all images with a bus|4"
  }
}

Response

When successful, server returns errorId = 0 and taskId

{
  "errorId": 0,
  "taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}

2. Get Result

Request

POST https://api.achicaptcha.com/getTaskResult

Parameters

Parameter NameData TypeRequired?Description
clientKeystringyesApi key
taskIdstringyesTaskId obtained from (1)

Request Example

POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
 
{
  "clientKey": "YOUR_API_KEY",
  "taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}

Response

{
  "errorId": 0,
  "status": "ready",
  "solution": "0,5,9"
}

Note: solution is a comma-separated list of cell indices to click, starting from 0, counted left-to-right, top-to-bottom.

Status Explanation

  • errorId = 0: Successfully solved, read result in solution
  • errorId = 1: Still solving, wait 2–3 seconds and try again
  • errorId > 1: System error, returns error code and description

Integration Examples

import requests
import time
 
def solve_recaptcha_image(image_base64, question, grid_count, api_key='YOUR_API_KEY'):
    # Step 1: Create task
    create_task_url = 'https://api.achicaptcha.com/createTask'
    create_task_payload = {
        'clientKey': api_key,
        'task': {
            'type': 'ComplexImageTask',
            'subType': 'recaptcha',
            'image': image_base64,
            'other': f'{question}|{grid_count}'
        }
    }
 
    response = requests.post(create_task_url, json=create_task_payload)
    result = response.json()
 
    if result['errorId'] > 1:
        raise Exception(result['errorDescription'])
 
    task_id = result['taskId']
 
    # Step 2: Poll for result
    get_result_url = 'https://api.achicaptcha.com/getTaskResult'
 
    while True:
        time.sleep(2)  # Wait 2–3 seconds between polls
 
        get_result_payload = {
            'clientKey': api_key,
            'taskId': task_id
        }
 
        response = requests.post(get_result_url, json=get_result_payload)
        result = response.json()
 
        if result['errorId'] > 1:
            raise Exception(result['errorDescription'])
 
        if result['status'] == 'ready':
            return result['solution']  # e.g. "0,5,9"
 
        # status == 'processing' → keep polling
 
# Usage
image_base64 = 'iVBORw0KGgoAAAANSUhEUgAA...'  # Base64 encoded captcha grid
question = 'Select all images with a bus'  # Full question text from the captcha prompt
grid_count = 4          # Grid size (3, 4, or 5)
solution = solve_recaptcha_image(image_base64, question, grid_count, 'YOUR_API_KEY')
print('Indices to click:', solution)  # e.g. "0,5,9"
 
# Click the corresponding cells
indices = [int(i) for i in solution.split(',')]
for index in indices:
    print(f'Click cell index: {index}')

Common Error Codes

Error CodeDescriptionNotes
0successSuccess
1processingProcessing
2missing required fieldsMissing required fields, check parameters again
3task not supportedTask type not supported
4task creation failedTask creation failed
5client key does not existAPI key does not exist, check API key again
6insufficient account balanceInsufficient account balance, add more credits
7task failed, please create a new taskTask failed, please create a new task
8task ID does not existTask ID does not exist

Best Practices

For best results when using Achicaptcha API, follow these principles:

1. Prepare Captcha Image

  • Capture only the grid area — no borders, no surrounding UI elements
  • Works for both browser and phone ReCaptcha grids
  • Encode each image as base64 and concatenate multiple images with | (e.g. base64img1|base64img2)
  • Ensure sufficient resolution for accurate recognition

2. Determine Accurate Information

  • Use the full question text shown in the captcha prompt (e.g. Select all images with a bus, Select all squares with traffic lights)
  • Determine the correct grid size: 3×3, 4×4, or 5×5
  • Format other as "question|grid_count" (e.g. "Select all images with a bus|4")

3. Polling Interval

  • Wait at least 2–3 seconds between result checks
  • Avoid sending too many consecutive requests
  • Set a timeout to prevent infinite loops (recommended: 120 seconds)

4. Process Results

  • solution is a comma-separated string of cell indices (e.g. "0,5,9")
  • Index starts from 0, counted left-to-right, top-to-bottom
  • Parse the string and click the corresponding cells

5. Retry Logic

  • Implement retry for temporary errors like ERROR_NO_SLOT_AVAILABLE
  • Use exponential backoff when retrying
  • Limit maximum retry attempts

6. API Key Security

  • Do not hardcode your API key in source code
  • Use environment variables or a secrets manager
  • Never expose your API key on the client side

Useful links: