Form regression tests
Keep end-to-end tests for your own sign-up and contact forms green without switching the check off in staging.
Recognition task
Send the arithmetic question as text and get the exact answer back in the same call. No image work on your side, no guessing.
Pay only for solved tasks. Failed tasks are refunded automatically.
What you send, what you get
A math captcha asks a short arithmetic question such as 12 + 30 = ? before a form can be sent. Many sign-up, comment and contact forms use it as a lightweight check. bypass.so reads the expression you send and returns the result as plain text.
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 MathCaptchaTask for this task. |
| captchaTextstringrequired | The question exactly as shown on the page, for example 12 + 30 = ?. Addition, subtraction, multiplication and division are supported. |
| 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 answer as a string, ready to type into the answer field. |
Integration
Plain HTTPS and JSON. No SDK to install.
MathCaptchaTask 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 answer text once the task is ready.
Copy the visible question text from the page you are testing. Keep operators and spaces as they are.
Create a MathCaptchaTask with the text in captchaText. The answer usually comes back in the createTask response.
Put solution.text into the form's answer input and submit the form as your script normally would.
Use cases
Built for testing, accessibility and data work on sites you own or are allowed to automate.
Keep end-to-end tests for your own sign-up and contact forms green without switching the check off in staging.
Help users of assistive tools get past arithmetic prompts that are rendered in ways screen readers handle poorly.
Automate repetitive submissions on internal or partner portals you are permitted to use.
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
status: "ready" and the answer. If it says processing, poll GET /getTaskResult/{taskId} as with any other type.POST /reportBad and the task's taskId. The price of that task goes back to your balance, once per task.Create an account, top up from a few dollars and get your key. You only pay for tasks that return a result.