Configure Captcha Providers
December 23, 2025 (October 3, 2026)
Table of contents
Configure captcha provider API keys for image and video generation. Google Flow requires reCAPTCHA v3 Enterprise tokens for API calls - these third-party services solve the captcha automatically.
Supported Providers:
| Provider | Cost per 1K | Avg Solve Time | Reports Back | Website |
|---|---|---|---|---|
| AntiCaptcha | ~$2.00 | ~8-12s | Yes | anti-captcha.com |
| CapSolver | ~$3.00 | ~8-12s | Yes | capsolver.com — use promo code useapi for 8% discount |
| EzCaptcha | ~$2.50 | ~2-5s | No | ez-captcha.com |
| YesCaptcha | varies | ~8-12s | No | yescaptcha.com |
| CapMonster | ~$1.50 | ~10-30s | Incorrect only | capmonster.cloud |
| SolveCaptcha | ~$0.80 | ~30-60s ⚠️ | Yes | solvecaptcha.com |
| 2Captcha | ~$2.99 | ~30-60s ⚠️ | Yes | 2captcha.com |
⚠️ SolveCaptcha and 2Captcha typically take 30-60 seconds per solve versus ~2-12 seconds for the others. They work well as low-cost fallbacks but can increase request latency as primary providers.
EzCaptcha solves in real time, in about 2–5 seconds, so a token Google rejects costs little time before the next provider takes over.
Reports Back — providers that support solve-result reporting receive correct/incorrect feedback after each use, which improves token quality over time.
Use GET /accounts/captcha-stats?anonymized=true to compare success rates across providers. Configure multiple providers for redundancy - the API will automatically retry with different providers if one fails or returns a rejected token.
Captcha Parameters
These parameters are available on all endpoints that require captcha: POST /images, POST /images/upscale, POST /videos, POST /videos/upscale, POST /videos/extend, POST /voices.
captchaToken— a user-provided reCAPTCHA v3 Enterprise token. When provided, the API uses this token directly instead of solving captcha through a provider. Single attempt, no retry. Must be a valid token string (minimum 20 characters).captchaRetry— how many tries to make (1-10, default 5). Each try uses the next provider in the provider order.captchaOrder— which providers to use and how many tries, as a comma-separated list."AntiCaptcha,AntiCaptcha,CapSolver"means: use AntiCaptcha and CapSolver, up to 3 tries. Only the providers in the list are used. The order you write them in doesn’t matter — the API decides it (see Provider order). To use one provider only, list only that one, e.g."CapSolver,CapSolver,CapSolver". Up to 10 entries, and each provider needs a key.
Note: captchaToken, captchaRetry, and captchaOrder are mutually exclusive - only one can be specified per request.
Provider order
Every image, video or voice you generate needs a captcha solved first. One of your captcha providers solves it, and Google accepts or rejects it. If Google rejects it, we try again with your next provider.
- We use all the providers you added keys for, or only the ones in
captchaOrderif you send it. A provider whose key has no money left or is invalid is skipped for 15 minutes. - We make 5 tries by default.
captchaRetrysets a different number, and withcaptchaOrderthe number of entries is used. - The first try goes to the provider Google is accepting best right now. If there are more tries than providers, we go through them again.
- If Google rejects the captcha, or the provider can’t solve it, the next try uses your next provider. Any other error from Google ends the request.
If you have only one provider, every try uses that provider.
We recommend adding at least two providers, for example AntiCaptcha and CapSolver, and ideally EzCaptcha too. Then every request starts with whichever provider is working best at the moment, fewer captchas get rejected, and you pay for fewer of them.
How we decide which provider is best
For each provider we look at its recent first tries (at least 100 of them, from the last 2 hours at most) and count how many Google accepted. 84 accepted out of 100 means a score of 84%. Tries from all customers count, so the score shows how the provider is doing right now. A captcha the provider failed to solve counts as rejected.
- A provider needs at least 100 recent tries before it can move up past another provider. A provider that has hardly been tried yet goes behind the others.
- The order only changes when one provider is clearly better than another, not on small ups and downs. A provider that moves into first place stays there for at least 15 minutes.
- About 1 request in 10 starts with one of your other providers, or up to 3 in 10 while that provider has too few recent tries, so we notice when it gets better. Only the first try of that request is affected.
- A provider that is doing very badly is almost never tried first.
When a provider gets worse, your requests move to a better one, usually within 15 minutes. You don’t need to change anything.
Before we have any data, the order is CapSolver, AntiCaptcha, YesCaptcha, CapMonster, SolveCaptcha, 2Captcha, EzCaptcha.
Example
You have keys for CapSolver, AntiCaptcha and EzCaptcha. Right now AntiCaptcha scores 84%, EzCaptcha 71% and CapSolver 43%.
| Request | Tries, in order |
|---|---|
| no captcha parameters | AntiCaptcha, EzCaptcha, CapSolver, AntiCaptcha, EzCaptcha |
captchaRetry: 2 | AntiCaptcha, EzCaptcha |
captchaOrder: "CapSolver,EzCaptcha,CapSolver" | EzCaptcha, CapSolver, EzCaptcha |
captchaOrder: "CapSolver,CapSolver" | CapSolver, CapSolver |
The request stops as soon as Google accepts a captcha, so most requests need only one try.
You can see the current ranking in GET /accounts/captcha-stats (provider_ranking). Every response shows which provider was used for each try, in captcha.attempts.
https://api.useapi.net/v1/google-flow/accounts/captcha-providers
Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
API tokenis required, see Setup useapi.net for details.
Request Body
{
"CapSolver": "<your CapSolver API key>",
"AntiCaptcha": "<your AntiCaptcha API key>",
"YesCaptcha": "<your YesCaptcha API key>",
"SolveCaptcha": "<your SolveCaptcha API key>",
"2Captcha": "<your 2Captcha API key>",
"EzCaptcha": "<your EzCaptcha API key>"
}
CapSolveris optional. API key from capsolver.com.AntiCaptchais optional. API key from anti-captcha.com.YesCaptchais optional. API key from yescaptcha.com.SolveCaptchais optional. API key from solvecaptcha.com.2Captchais optional. API key from 2captcha.com.EzCaptchais optional. API key from ez-captcha.com.
Notes:
- All fields are optional - only include providers you want to configure
- Set a field to empty string
""to remove that provider - Users receive 300 free captcha credits when adding their first Google Flow account. They are used automatically when you have not added any provider keys, and are solved with our own AntiCaptcha, CapSolver and EzCaptcha keys, best provider first.
- Once free credits are exhausted, at least one provider must be configured to use POST /images, POST /images/upscale, or POST /videos
Responses
-
Captcha providers configured successfully. Returns masked keys for all configured providers.
With providers configured:
{ "CapSolver": "abc12…", "AntiCaptcha": "def34…", "balances": { "CapSolver": { "status": "ok", "balance": 68.87, "checkedAt": "2026-10-03T22:11:17.173Z" }, "AntiCaptcha": { "status": "empty", "balance": 0, "checkedAt": "2026-10-03T22:11:17.173Z" } } }balancesshows, for each key you added, whether it works and how much money is left on it. We ask each provider directly, and keep the answer for 15 minutes, so a balance can be up to 15 minutes old.checkedAtsays when we asked. Saving keys with POST checks them again (if the last check is more than a minute old), so you can see right away whether a key you just added or topped up works.statusMeaning okThe key works and has money on it. emptyThe key has no money left. We skip it until it is topped up. invalidThe provider does not accept this key. Check it in your provider account. unavailableThe provider did not answer. Try again in a few minutes. balanceis the amount the provider reports, in its own unit: US dollars for most providers, points for YesCaptcha. It is left out when the key isinvalidor the provider isunavailable.erroris the provider’s message, only forinvalidandunavailable.All providers removed (shows free credits if available):
{ "freeCaptchaCredits": 300 } -
Invalid provider name specified.
{ "error": "Invalid captcha provider(s): InvalidProvider. Valid providers: CapSolver, AntiCaptcha, YesCaptcha, CapMonster, SolveCaptcha, 2Captcha, EzCaptcha" } -
Invalid API token.
{ "error": "Unauthorized" }
Model
{ // TypeScript, all fields are optional
CapSolver?: string // Masked API key or omitted if not configured
AntiCaptcha?: string // Masked API key or omitted if not configured
YesCaptcha?: string // Masked API key or omitted if not configured
CapMonster?: string // Masked API key or omitted if not configured
SolveCaptcha?: string // Masked API key or omitted if not configured
'2Captcha'?: string // Masked API key or omitted if not configured
EzCaptcha?: string // Masked API key or omitted if not configured
freeCaptchaCredits?: number // Remaining free credits (only shown when no providers configured)
balances?: Record<string, { // Per configured key, see below. Omitted when no keys are configured
status: 'ok' | 'empty' | 'invalid' | 'unavailable'
balance?: number // As the provider reports it (US dollars for most, points for YesCaptcha)
error?: string // Provider's message, for invalid and unavailable only
checkedAt: string // When we asked the provider (ISO 8601). Answers are kept for 15 minutes
}>
}
Note: freeCaptchaCredits is only included in the response when:
- No captcha providers are configured (all removed), AND
- The user has remaining free credits (> 0)
Examples
-
curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_TOKEN" \ -X POST "https://api.useapi.net/v1/google-flow/accounts/captcha-providers" \ -d '{ "AntiCaptcha": "<your AntiCaptcha API key>", "CapSolver": "<your CapSolver API key>" }' -
const apiUrl = 'https://api.useapi.net/v1/google-flow/accounts/captcha-providers'; const token = 'YOUR_API_TOKEN'; const response = await fetch(apiUrl, { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ AntiCaptcha: '<your AntiCaptcha API key>', CapSolver: '<your CapSolver API key>' }) }); const result = await response.json(); console.log('Captcha providers configured:', result); -
import requests apiUrl = 'https://api.useapi.net/v1/google-flow/accounts/captcha-providers' token = 'YOUR_API_TOKEN' headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer {token}' } body = { 'AntiCaptcha': '<your AntiCaptcha API key>', 'CapSolver': '<your CapSolver API key>' } response = requests.post(apiUrl, headers=headers, json=body) print(response.status_code, response.json())