SurSolver

Image to Text Captcha Solver API

An OCR captcha API for distorted image to text captchas — WordPress captcha plugins, contact forms, CMS login pages. Send the picture, pick the module, get the characters.

Updated

$0.15 / 1K tasksCharged when a task is accepted

What a text captcha is, and when an image to text API is the answer

Thousands of sites still guard their forms with the classic text captcha: four to six distorted characters over a noisy background, served as a plain image. The challenge is nothing but an <img> tag, and the user types what they read.

Generic OCR handles these poorly, because every generator distorts differently: different fonts, wave patterns, strike-through lines and colour noise. SurSolver uses a module-based image to text solver: choose the module whose sample images match your captcha. The answer comes back as a plain string, with no browser user agent or proxy required. Keep the original browser session and submit before the site refreshes or expires the challenge.

An OCR captcha solver tuned per generator

Off-the-shelf OCR captcha reading fails on these images for a simple reason: a generic engine guesses at characters, while the distortion is systematic. Wave the baseline, strike a line through the word, print the letters in a font no document ever uses — each generator does it the same way every time, and a model trained on that exact distortion reads through it.

That is what the module parameter buys. Each module is an OCR model trained on one generator's output, so the characters come back as text — case included — instead of a best guess. You pick the module once by matching your target's image against the samples below, and every later solve for that site uses the same id.

Supported modules and their ids

The module parameter is a numeric string without leading zeros, for example "1". Match your captcha against these samples; availability depends on the active modules.

Module Example images
1 Module 1 sample 1 Module 1 sample 2
2 Module 2 sample 1 Module 2 sample 2 Module 2 sample 3
3 Module 3 sample 1
4 Module 4 sample 1 Module 4 sample 2
5 Module 5 sample 1 Module 5 sample 2
6 Module 6 sample 1 Module 6 sample 2
7 Module 7 sample 1 Module 7 sample 2 Module 7 sample 3
8 Module 8 sample 1
9 Module 9 sample 1 Module 9 sample 2 Module 9 sample 3
10 Module 10 sample 1 Module 10 sample 2 Module 10 sample 3
11 Module 11 sample 1
13 Module 13 sample 1 Module 13 sample 2 Module 13 sample 3
14 Module 14 sample 1 Module 14 sample 2
16 Module 16 sample 1 Module 16 sample 2
17 Module 17 sample 1 Module 17 sample 2 Module 17 sample 3
18 Module 18 sample 1
19 Module 19 sample 1
20 Module 20 sample 1 Module 20 sample 2
21 Module 21 sample 1 Module 21 sample 2 Module 21 sample 3
22 Module 22 sample 1 Module 22 sample 2
23 Module 23 sample 1 Module 23 sample 2 Module 23 sample 3
24 Module 24 sample 1 Module 24 sample 2 Module 24 sample 3
25 Module 25 sample 1 Module 25 sample 2
26 Module 26 sample 1
27 Module 27 sample 1 Module 27 sample 2
28 Module 28 sample 1 Module 28 sample 2 Module 28 sample 3
29 Module 29 sample 1 Module 29 sample 2
30 Module 30 sample 1 Module 30 sample 2 Module 30 sample 3
31 Module 31 sample 1
32 Module 32 sample 1 Module 32 sample 2
33 Module 33 sample 1
34 Module 34 sample 1
35 Module 35 sample 1 Module 35 sample 2 Module 35 sample 3
36 Module 36 sample 1 Module 36 sample 2

For module: "36", solution.answer combines the answer to the question and the five-digit code, separated by a space, for example 14 59695. Send the complete original image.

Solving a WordPress captcha, and other common targets

The same three steps cover every text-captcha target; only the page around the image changes.

  • A WordPress captcha. WordPress sites put the distorted image on the login form or a contact form plugin. Open the page, copy the captcha image's address (or read the <img> element's src), fetch those exact bytes, and send them as body with the module whose sample matches. The answer goes into the captcha input next to the image — submit the form in the same session.
  • A PHP or CMS contact form. Same flow: the form holds an <img> and one input. The image is the task; the input gets solution.answer.
  • A forum or wiki registration page. These refresh the image on every load, so capture, solve and submit in one pass without re-requesting the image.

Match the module by what the image looks like — font, wave, noise — not by the software that serves it. If nothing in the table matches, send support a sample image and the target URL.

How to send a task

Create the task with the image the captcha endpoint returned and the module id from the table, then poll getTaskResult. The solution is a plain string:

snippet.json
{
  "clientKey": "sur_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "task": {
    "type": "ImageToTextTask",
    "module": "7",
    "body": "iVBORw0KGgoAAAANSUhEUgAA..."
  }
}
snippet.json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "answer": "fp4nnd"
  }
}

body is the raw base64 of one captcha image, without a data: prefix or whitespace, up to 524,288 characters (384 KiB of decoded bytes). The answer is the text exactly as the model reads it, characters and case included. Submit it using the form's own case rules.

Common mistakes

  • A scaled screenshot instead of the source image. The model is trained on the image the captcha endpoint serves. A retina capture, a zoomed page or a cropped screenshot changes the metrics and hurts the answer rate. Read the image bytes from the element's source, or capture the element box at device scale 1.
  • A data: prefix on the base64 string. Send raw base64 only.
  • Solving a captcha that has already refreshed. Many generators serve a new image every time the endpoint is hit and accept only the latest one. Capture, solve and submit without re-requesting the image in between.
  • The wrong module id. The model is per-generator: a model trained on a different distortion reads the right characters with the wrong shapes. Check the font and the noise pattern of your target against the table, or send support a sample.
  • Case mismatch on submission. The answer arrives in the case the model reads. Most generators compare case-insensitively; if yours does not, convert before submitting.

Solve it with SurSolver

The task type is ImageToTextTask with the module and body fields above; poll getTaskResult until the status is ready and read solution.answer. The accepted names and parameters are listed by the public catalog (GET /v1/task-types). For the full browser walkthrough — capturing the image with Playwright and submitting the answer — see the Image to Text guide.

If your target is an MTCaptcha widget with a sitekey and a token flow instead of a bare text image, that is the MTCaptcha solver — a different task type with its own parameters.

FAQ

How does the image to text captcha solver work?

You send the captcha image as base64 with the module id of the generator that produced it, and the API returns the characters as a plain string in the solution: answer. There is no page to open and no token to submit — you type the answer into the form yourself.

What is the module parameter?

Every generator distorts text in its own way, so each one has its own model. The module id picks that model, which is why the answer rate stays high. The table below shows every supported id next to a real sample image — match your target's captcha against the samples.

Can it solve a WordPress captcha?

Yes. WordPress captcha plugins on login and contact forms serve the classic distorted-text image. Match that image against the module table, send its bytes as body with the matching module id, and type solution.answer into the form field.

Which image formats are accepted?

The image the captcha endpoint returned, as base64 without a data: prefix — PNG and JPEG both work. Capture the element exactly as the browser received it: a scaled or retina screenshot of the widget hurts the answer rate.

Do you solve MTCaptcha text challenges too?

Yes — the MTCaptcha text challenge is its own module in the table below, and the flow is identical: send the challenge image, receive the characters. The interactive MTCaptcha widget with a sitekey and token flow is a different product, covered on the MTCaptcha solver page.