Configure Captcha Providers

December 23, 2025 (October 3, 2026)

Table of contents

  1. Request Headers
  2. Request Body
  3. Responses
  4. Model
  5. Examples
  6. Try It

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.

  1. We use all the providers you added keys for, or only the ones in captchaOrder if you send it. A provider whose key has no money left or is invalid is skipped for 15 minutes.
  2. We make 5 tries by default. captchaRetry sets a different number, and with captchaOrder the number of entries is used.
  3. 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.
  4. 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

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>"
}

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

  • 200 OK

    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" }
      }
    }
    

    balances shows, 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. checkedAt says 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.

    status Meaning
    ok The key works and has money on it.
    empty The key has no money left. We skip it until it is topped up.
    invalid The provider does not accept this key. Check it in your provider account.
    unavailable The provider did not answer. Try again in a few minutes.

    balance is the amount the provider reports, in its own unit: US dollars for most providers, points for YesCaptcha. It is left out when the key is invalid or the provider is unavailable. error is the provider’s message, only for invalid and unavailable.

    All providers removed (shows free credits if available):

    {
      "freeCaptchaCredits": 300
    }
    
  • 400 Bad Request

    Invalid provider name specified.

    {
      "error": "Invalid captcha provider(s): InvalidProvider. Valid providers: CapSolver, AntiCaptcha, YesCaptcha, CapMonster, SolveCaptcha, 2Captcha, EzCaptcha"
    }
    
  • 401 Unauthorized

    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())
    

Try It