QA on legacy forms
Run automated tests against older sign-in and checkout flows that still rely on text images.
Recognition task
Send a distorted text captcha as a base64 image and get the characters back as a plain string, typically in about a second.
Pay only for solved tasks. Failed tasks are refunded automatically.
What you send, what you get
Text captchas show a short string of letters and digits that has been warped, rotated, crossed out or covered in noise. bypass.so returns the characters it reads so your script can type them into the answer field.
Recognition tasks usually finish inside the createTask call, so the first response already carries the answer. Typical time to a result is about a second.
| Field | Description |
|---|---|
| clientKeystringrequired | Your API key. You can also send it as Authorization: Bearer <key> instead. |
| typestringrequired | Always ImageToTextTask for this task. |
| imageBase64stringrequired | The captcha image as base64, PNG or JPG. Send the raw base64 data, without a data: prefix. Crop it to the captcha itself for the best results. |
| Field | Meaning |
|---|---|
| errorId | 0 on success, 1 on error. Errors also carry errorCode and errorDescription. |
| status | processing while the task runs, then ready or failed. |
| taskId | Returned by createTask. Use it to poll and to report a wrong answer. |
| solution.text | The characters read from the image, in order. |
Integration
Plain HTTPS and JSON. No SDK to install.
ImageToTextTask and its fields.processing.solution.text and continue your flow.POST /reportBad?task_id=<taskId> with your key as Bearer returns that task's price once.| errorCode | When it happens |
|---|---|
| ERROR_KEY_INVALID | The API key is missing or not recognised (HTTP 403). |
| ERROR_INSUFFICIENT_CREDITS | Your balance does not cover the task price. Top up and resend (HTTP 402). |
| ERROR_TASK_NOT_SUPPORTED | The type value is unknown or not live yet (coming soon). Nothing is charged. |
| ERROR_BAD_REQUEST | The body is not valid JSON or a field has the wrong type (HTTP 400). |
| ERROR_CAPTCHA_UNSOLVABLE | The task could not be completed. The held price is refunded automatically. |
| ERROR_RATE_LIMIT | Too many requests in a short time. Back off and retry (HTTP 429). |
| ERROR_NOT_FOUND | Unknown taskId, or the task belongs to another key (HTTP 404). |
Check your balance any time with GET /balance and Authorization: Bearer <key>. Full list in the error reference.
Using the result
What your own script does with the recognised text once the task is ready.
Save the captcha element as PNG or JPG from your test run, or download it from its image URL in the same session.
Create an ImageToTextTask with the encoded image in imageBase64. Most results arrive in the createTask response.
Enter solution.text into the captcha input and submit the form. Keep the same session that loaded the image.
Use cases
Built for testing, accessibility and data work on sites you own or are allowed to automate.
Run automated tests against older sign-in and checkout flows that still rely on text images.
Give people who cannot read distorted text a way through forms that offer no other option.
Process permitted public records portals that put a text image in front of each lookup.
Use bypass.so only where you have permission. Respect each site's terms and rate limits, and never use results to access accounts or data that are not yours. See our acceptable use policy.
Pricing
That is — per task, or — tasks for $100.
| Tier | Top-up | Bonus | Effective / 1k | Tasks covered |
|---|
Related types
imageBase64. Keep the file small and cropped to the captcha; a whole-page screenshot lowers accuracy and slows the task down.status: "ready" straight away. Otherwise poll GET /getTaskResult/{taskId} every second or two.POST /reportBad and the taskId. That task's price is returned to your balance once, and you can send a fresh image as a new task.Create an account, top up from a few dollars and get your key. You only pay for tasks that return a result.