Skip to content
NexCaptcha

Migration guide

Switching from 2Captcha

Wire-compatible with the 2Captcha task API: same createTask shape, same clientKey auth, same type names. Change the base URL and keep your client.

API compatibilityDrop-in — change the base URL

What they do well

  • The widest catalogue in the category, and it is not close. Their own price table runs 48 rows and carries long-tail types nobody else sells: CyberSiARA, Cutcaptcha, Binance, Solve Media, arcaptcha, Basilisk, TSPD. We publish 33 types. If your target runs one of theirs and not one of ours, 2Captcha is the right answer and this page is not.
  • A human worker pool sits behind the AI layer, so a genuinely novel or visually weird challenge still comes back solved instead of ERROR_CAPTCHA_UNSOLVABLE. This is the real reason long-time customers stay, and it is a property no pure-ML vendor on this list has.
  • Their v1 in.php/res.php wire format became the de-facto standard for the whole industry. DeathByCaptcha, CapMonster, RuCaptcha and others ship compatibility layers for it. Being the reference implementation is a durable asset.
  • Eight first-party open-source SDKs (Python, PHP, Java, C#, Node, Go, Ruby, C++), browser extensions and framework guides. Copy-paste integration is close to trivial and the docs are the best written in this category.
  • Running since 2015, with a public status page and a live per-type capacity and speed column on the pricing page, so you can see before you buy whether a type is backed up.
  • Pay per solve, no charge on failure, no subscription and no minimum commitment. reportCorrect and reportIncorrect let you feed token rejections back and get credited for bad reCAPTCHA tokens.

Where they fall short

  • Prices are load-based bands, not rates. reCAPTCHA v2 is published as $1.00 – $2.99, FunCaptcha as $1.45 – $50.00. The number you pay tracks the worker bid rate, so you cannot model next month's spend from this month's volume.
  • The pricing page is localised by IP and there is no USD anchor on it. Fetched directly on 2026-09-22 it returned a CNY table; fetched through a US exit, the same URL returned a USD table. The two are independent regional price points, not one converted into the other.
  • Akamai, Kasada and PerimeterX appear on the table priced at $0 — listed, but not billed as solve types. A row on the price list does not tell you whether the type is actually sold.
  • hCaptcha is not on the current price table at all. We checked all 48 rows in both currency renderings, and 2captcha.com/api-docs/hcaptcha returns 404. Third-party comparison articles still quote about $2.99 per 1,000; their own site does not.
  • Human-in-the-loop means latency, and none of it is published as percentiles. Token captchas commonly land in the 10 to 30 second range and image captchas 8 to 15. The free-capacity-per-minute column on their own pricing page exists because throughput per type moves with how many workers are on shift.

[ 02 ]Side by side

Side by side

Side by side
2CaptchaNexCaptcha
Published pricing48 rows, 7 of them load-based bands: reCAPTCHA v2 $1.00–$2.99, FunCaptcha $1.45–$50.00.33 types, one flat rate each, $0.75–$4.49 per 1,000, one USD price list for every visitor.
Published latencyLive per-type capacity and speed on the pricing page. No p50 or p95 anywhere.p50 and p95 published per type. Overall p50 4.8s, p95 11.2s.
Published success rateNot published.Published per type, 99.4% overall, counted on tokens the target accepted.
What counts as a solveAn answer returned. Token rejections are handled after the fact via reportIncorrect.The target site accepting the token. We bill on that, not on returning one.
Failed-solve billingFailures are not charged. Rejected reCAPTCHA tokens are credited when you report them.Rejected, failed and timed-out solves are refunded automatically within the hour.
API compatibilitycreateTask/getTaskResult on api.2captcha.com, plus the legacy in.php/res.php pair.Same task API and same type names. No in.php equivalent, so v1 callers port first.
Support responseTicket and email support. No published response-time target.24/7 engineers. Median first response 7 minutes on Telegram.

[ 03 ]The code change

The code change

2Captcha runs two APIs side by side. The modern one is a JSON POST to api.2captcha.com/createTask and /getTaskResult with clientKey in the body, which is a deliberate clone of the Anti-Captcha convention — the same convention we implement, so the request body, the {errorId, taskId} envelope and the standard task type names all carry over untouched. The older one is GET/POST to in.php and res.php with key= and method=, and we do not expose an endpoint in that shape. If you are still on v1, the move is a rewrite of your submit and poll functions rather than a URL change, and the steps below say so.

Before
const task = { type: "RecaptchaV2TaskProxyless", websiteURL, websiteKey };
const res = await fetch("https://api.2captcha.com/createTask", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ clientKey: API_KEY, task }),
});
After
const task = { type: "RecaptchaV2TaskProxyless", websiteURL, websiteKey };
const res = await fetch("https://api.nexcaptcha.net/createTask", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ clientKey: API_KEY, task }),
});

How to migrate

  1. 01Point your existing client at https://api.nexcaptcha.net/createTask and swap the API key — nothing else in the request body changes.
  2. 02Leave the task object alone if your types come from the shared Anti-Captcha lineage: RecaptchaV2TaskProxyless, RecaptchaV3TaskProxyless, RecaptchaV2EnterpriseTaskProxyless, TurnstileTaskProxyless, GeeTestTaskProxyless, FunCaptchaTaskProxyless and ImageToTextTask all resolve here under the same spelling.
  3. 03Check the 2Captcha-only type names against our list of 33 before you move that traffic. CutCaptcha, CyberSiARA, arcaptcha, Basilisk and Solve Media have no equivalent here, and there is no point discovering that in production.
  4. 04If you are still on in.php/res.php, rewrite the two call sites as createTask/getTaskResult first. Re-point callbackUrl at the same handler afterwards — the POST body is the getTaskResult response, so the handler itself does not change.
  5. 05Run a 10% traffic split for a week, compare accepted rate and p95 per type, then tighten the 60 to 120 second timeouts your 2Captcha client was written around.

[ 04 ]Questions about this one

Questions about this one

Yes, and you should. Both take the same request body, and the two accounts are independent, so a percentage split in your client is enough — send 10% here for a week and compare accepted rate and p95 per type before you move the rest. Nothing on our side needs to know you are testing.

Not for the types that come from the shared Anti-Captcha lineage — RecaptchaV2TaskProxyless, RecaptchaV3TaskProxyless, TurnstileTaskProxyless, GeeTestTaskProxyless, FunCaptchaTaskProxyless and ImageToTextTask are spelled the same here. The names that exist only on 2Captcha are a different matter: CutCaptcha, CyberSiARA, arcaptcha, Basilisk and Solve Media are types we do not sell, so check your traffic against our list of 33 first.

It stays with them. No vendor in this market can transfer a balance to another, and anyone who tells you otherwise is describing a promotional credit, not your money. The practical move is to run the split above and spend the old balance down on the traffic you have not switched yet.

No. Their base rates are lower — reCAPTCHA v2 starts at $1.00 per 1,000 against our flat $1.50, and image captcha at $0.50 against our $0.75. What the difference buys is a number you can budget against: one rate per type instead of a band that moves with worker bid rate, one USD price for every visitor rather than a price that changes with your IP, published p50 and p95 per type, and billing only on tokens the target site actually accepted.

Solve your first thousand on us.

Create a key, paste it into the sample above, and watch a real token come back. No card, no sales call.