Solver Cloudflare

Pre-solved Token Pool

The Token Pool feature allows high-concurrency scraping and automation bots to retrieve valid CAPTCHA tokens instantly (< 100ms) without waiting for the normal 5–15 second solving time.


How It Works

  1. Pre-populate the Pool: Submit a task with a pool type and specify how many tokens to solve (taskCount). SolverCF workers solve them in advance and deposit them into your target websiteKey pool.
  2. Instant Consumption: Whenever your bot needs a token, call the resultTaskPool endpoint. A pre-solved token, matching User-Agent, and cookie (if applicable) are popped from the pool instantly.

1. Pre-populating the Pool (createTask)

Submit a task using one of the pool task types:

Task Type Target Captcha
TurnstileTaskPool Cloudflare Turnstile
RecaptchaV3TaskProxylessPool Google reCAPTCHA v3
RecaptchaV3EnterpriseTaskProxylessPool Google reCAPTCHA v3 Enterprise

Request Parameters

Send a POST request to https://solvercf.com/token/extension/createTask:

cURL
curl -X POST https://solvercf.com/token/extension/createTask \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "YOUR_CLIENT_KEY",
    "task": {
      "type": "TurnstileTaskPool",
      "websiteUrl": "https://example.com/target-page",
      "websiteKey": "0x4AAAAAAAB__YGWiObopXheP",
      "taskCount": 10
    }
  }'
Field Type Required Description
type string Yes One of the pool task types above.
websiteUrl string Yes URL containing the challenge.
websiteKey string Yes Target site key. Tokens are pooled and indexed by this websiteKey.
taskCount integer Yes Number of tokens to solve and deposit into the pool (must be > 0).

Response:

JSON
{
  "errorId": 0,
  "taskId": "f1a2b3c4-d5e6-7a8b-9c0d-1e2f3a4b5c6d",
  "status": "created"
}

2. Instant Token Retrieval (resultTaskPool)

Call this endpoint to instantly claim one pre-solved token from the pool.

Request

Code
POST https://solvercf.com/token/extension/resultTaskPool
JSON
{
  "clientKey": "YOUR_CLIENT_KEY",
  "websiteKey": "0x4AAAAAAAB__YGWiObopXheP"
}
Field Type Required Description
clientKey string Yes Your account API key.
websiteKey string Yes The site key of the pool you wish to pull a token from.

Response

JSON
{
  "status": "success",
  "token": "0.4AAAAAAAB__YGWiObopXheP_...",
  "cookie": "cf_clearance=...",
  "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...",
  "remaining": 9
}
Field Type Description
status string "success" when a token is retrieved, or error message if pool is empty.
token string Solved token.
cookie string Solved cookie (if applicable).
userAgent string Exact User-Agent the token was solved with.
remaining integer Number of tokens remaining in this websiteKey pool.

Complete Code Examples: Instant Token Retrieval

cURL

cURL
curl -X POST https://solvercf.com/token/extension/resultTaskPool \
  -H "Content-Type: application/json" \
  -d '{
    "clientKey": "YOUR_CLIENT_KEY",
    "websiteKey": "0x4AAAAAAAB__YGWiObopXheP"
  }'

Python

Python
import requests

CLIENT_KEY = "YOUR_CLIENT_KEY"
WEBSITE_KEY = "0x4AAAAAAAB__YGWiObopXheP"

def get_token_from_pool(client_key: str, website_key: str):
    resp = requests.post("https://solvercf.com/token/extension/resultTaskPool", json={
        "clientKey": client_key,
        "websiteKey": website_key
    }).json()

    if resp.get("status") != "success" or not resp.get("token"):
        raise Exception(f"Failed to get token from pool: {resp.get('status')}")

    print(f"Token retrieved instantly! Remaining in pool: {resp.get('remaining')}")
    print(f"Token: {resp['token']}")
    print(f"UserAgent: {resp.get('userAgent')}")
    if resp.get("cookie"):
        print(f"Cookie: {resp.get('cookie')}")
        
    return resp

if __name__ == "__main__":
    result = get_token_from_pool(CLIENT_KEY, WEBSITE_KEY)

Node.js

JavaScript
const CLIENT_KEY = "YOUR_CLIENT_KEY";
const WEBSITE_KEY = "0x4AAAAAAAB__YGWiObopXheP";

async function getTokenFromPool(clientKey, websiteKey) {
  const res = await fetch("https://solvercf.com/token/extension/resultTaskPool", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ clientKey, websiteKey }),
  }).then((r) => r.json());

  if (res.status !== "success" || !res.token) {
    throw new Error(`Failed to get token from pool: ${res.status}`);
  }

  console.log(`Token received! Remaining: ${res.remaining}`);
  return res;
}

getTokenFromPool(CLIENT_KEY, WEBSITE_KEY)
  .then((data) => console.log(data))
  .catch((err) => console.error(err));

C#

C#
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;

class Program
{
    private static readonly HttpClient HttpClient = new HttpClient();
    private const string ClientKey = "YOUR_CLIENT_KEY";
    private const string WebsiteKey = "0x4AAAAAAAB__YGWiObopXheP";

    static async Task Main()
    {
        var result = await GetTokenFromPoolAsync(ClientKey, WebsiteKey);
        Console.WriteLine($"Token: {result.Token}");
        Console.WriteLine($"UserAgent: {result.UserAgent}");
        Console.WriteLine($"Remaining: {result.Remaining}");
    }

    public static async Task<ResultTaskPoolResponse> GetTokenFromPoolAsync(string clientKey, string websiteKey)
    {
        var response = await HttpClient.PostAsJsonAsync("https://solvercf.com/token/extension/resultTaskPool", new
        {
            clientKey,
            websiteKey
        });

        var result = await response.Content.ReadFromJsonAsync<ResultTaskPoolResponse>();
        if (result == null || result.Status != "success" || string.IsNullOrEmpty(result.Token))
        {
            throw new Exception($"Failed to get token from pool: {result?.Status ?? "unknown error"}");
        }

        return result;
    }

    public class ResultTaskPoolResponse
    {
        public string? Status { get; set; }
        public string? Token { get; set; }
        public string? Cookie { get; set; }
        public string? UserAgent { get; set; }
        public int Remaining { get; set; }
    }
}